Делегат не работает при выборе строки в UITableView - PullRequest
0 голосов
/ 29 марта 2012

У меня есть UITableView, который, когда я выбираю строку, я хочу перейти к другому представлению, где отображаются детали танка ... Переход происходит, но делегат не отправляет объект и т. Д. Более... Я думаю, что у меня есть некоторые проблемы с тем, где делегат объявлен / синтезирован и реализован и т. Д. ...

Здесь я объявляю делегата в заголовочном файле UITableViewController:

@class iTanksV2ListViewController;
@protocol iTanksV2ListViewControllerDelegate
- (void) iTanksListViewController:(iTanksV2ListViewController *) sender choseTank:(tank *)tank;
@end
@interface iTanksV2ListViewController : UITableViewController
@property (weak, nonatomic) id <iTanksV2ListViewControllerDelegate> delegate;
@end

и вот что у меня в файле UITableViewControllers m:

@implementation iTanksV2ListViewController
@synthesize delegate = _delegate;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tankTableView.delegate = self;
    self.tankTableView.dataSource = self;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.selectedTank = [self.tanks objectAtIndex:indexPath.row];
    [self.delegate iTanksListViewController:self choseTank:self.selectedTank];
}

... и вот код, который у меня есть для делегата в DetailViewControllerфайл реализации ...

@interface tankDetailViewController () <iTanksV2ListViewControllerDelegate>
@end

-(void)iTanksListViewController:(iTanksV2ListViewController *)sender choseTank:(id)tank
{
    self.tankToShow = tank;
}

Все остальные переменные и т. д. объявлены, я оставил их в надежде, что это прояснит ситуацию - код компилируется, и происходит переход, но делегат не выглядитсделать что-нибудь !!!

1 Ответ

1 голос
/ 29 марта 2012

Вы упоминаете segues, поэтому я предполагаю, что вы используете раскадровку.Если это правда, забудьте о делегатах для этой цели.Предполагается, что делегатом является объект, выполняющий одно действие для другого, но все, что вам нужно, - это передача данных.

Я предлагаю вместо этого использовать метод prepareForSeque: в вашем классе iTanksV2ListViewController.Сохраняйте строку, которая устанавливает self.selectedTank при нажатии строки, а затем добавьте что-то вроде этого в prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    tankDetailViewController *next = (tankDetailViewController *)[segue destinationViewController];
    next.tankToShow = self.selectedTank;
}
...