Мое приложение запускается в контроллер навигации. Контроллер корневого представления имеет кнопку, которая создает всплывающее окно с tableViewController, позволяющее пользователю выбрать ячейку, которая, используя делегат TableViewController, который устанавливается при создании всплывающего окна, хотя preperaForSegue, передает обратно в корневой контроллер представления и помещает соответствующий ViewController в стек навигации.
Делегат настроен так:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"planningSegue"])
{
[segue.destinationViewController setDelegate:self];
}
}
Метод называется так:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[[self delegate] gotoPlanningToPage:[tableView cellForRowAtIndexPath:indexPath].textLabel.text];
}
Это отлично работает.
У меня есть другая кнопка на контроллере корневого представления, которая вызывает другой поповер с другим tableViewController, у этого есть список опций, каждый из которых при выборе будет передавать другое представление таблицы в стек (все еще внутри поповера) ) содержащий список предметов. При выборе одного из них необходимо связаться с основным ViewController (тот, который изначально создал поповер), чтобы добавить новый вид в свой стек навигации, аналогично тому, как это делает первая кнопка.
Вопрос : Как / где мне установить делегата для второго tableViewController?
Я не могу создать его при создании всплывающего окна, поскольку второй tableViewController появляется только тогда, когда в первом TVC выбрана ячейка. Но я не могу понять, как настроить его с первого TVC, когда вызывается второй TVC, потому что я не вижу способа связаться с создателем (родителем?) Всплывающего окна.
Единственная мысль, которая у меня возникла, - установить основной ViewController в качестве делегата для TVC первого уровня в поповер, затем установить этот TVC в качестве делегата для TVC второго уровня и передать сообщение обратно через него, с другой ... Это просто не правильно, хотя я не могу не сказать, что должен быть более простой / понятный способ сделать это, чем создание делегата с единственной целью помочь кому-то другому установить его делегат. !
Я все еще относительно новичок во всем этом, поэтому извиняюсь, если не понял смысла или пропустил что-то явно очевидное!