UITableView didSelectRowAtIndexPath с prepareForSegue, но didLoadView не вызывается - PullRequest
4 голосов
/ 23 февраля 2012

Я изучаю iOS, и я написал простое приложение для iPhone с использованием iOS 5. Приложение показывает UITableView, заполненный именами докладчиков, когда я выбираю одно из имен, оно должно идти в UIViewController и отображать сведения об этом человеке. (имя, адрес и т. д.), поэтому его два ViewController - это UITableViewController и UIViewController (оба подклассы).

Итак, в MICSpeakersTableViewController: UITableViewController у меня есть это:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MICSpeakerDetailViewController *detailViewController = [[MICSpeakerDetailViewController alloc] initWithNibName:@"Detail" bundle:nil];    

    [detailViewController setSpeaker:[[self getSpeakers] objectAtIndex:indexPath.row]];
    [self.navigationController pushViewController:detailViewController animated:YES];    
}

, который вызывается, когда я выбираю его, и заполняет динамик (в том смысле, что его нет, а описание совпадает).

Тогда у меня это в той же реализации:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *indexPath = [ self.tableView indexPathForCell:sender];

    if ([segue.identifier isEqualToString:@"Detail"])
        [segue.destinationViewController setSpeaker:[[self getSpeakers] objectAtIndex:indexPath.row]];
}

Который также вызывается, и segue.identifier имеет значение Detail, а динамик destinationViewController установлен правильно (не ноль, описание соответствует). Я не совсем уверен, почему я должен установить это снова, так как я устанавливаю это в didSelectRowAtIndexPath, но я установил это снова, и это кажется безвредным.

Наконец, в MICSpeakerDetailViewController вызывается метод initWithNibName, а self = [super initWithNibName: nibNameOrNil bundle: nibBundleOrNil]; возвращает экземпляр.

Однако, передача никогда не происходит, и viewDidLoad никогда не вызывается.

Это, наверное, что-то маленькое, но я не могу понять ... любой совет?

Редактировать: Вот скриншот раскадровки, показывающий переход и контроллеры:

enter image description here

1 Ответ

6 голосов
/ 24 февраля 2012

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

Чтобы сделать это, щелкните по вашему контроллеру табличного представления, затем выберите Редактор -> Внедрить -> Контроллер навигации. Если вы также должны находиться в контроллере панели вкладок, то контроллер навигации встроен в него аналогичным образом. Вы должны увидеть следующее:

enter image description here

Ваш переход теперь будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...