2

У меня есть 1 главный UIViewController, который содержит UITabBarController. Контроллер панели вкладок имеет 4 UIViewControllers (каждый из них управляется UINavigationControllers). Сжато, это выглядит следующим образом:Управление NSNotification вместе с взаимодействиями UITabBarController

 
MainViewController 
    | 
    |--- FirstUIViewController 
    | 
    |--- SecondUIViewController 
    | 
    |--- ThirdUIViewController 
    | 
    |--- FourthUIViewController 

FirstUIViewController загружается по умолчанию.

В SecondUIViewController есть событие, которое может произойти. Это событие содержит конкретные данные, которые передаются вместе с ним. Когда это событие произойдет, я хочу, чтобы произошло 2 события:

1) Был введен четвёртый переключатель, который будет выбран в контроллере панели вкладок для визуального отображения другой вкладки.

2) Последующее действие в FourthUIViewController, в котором выбран конкретный UITableViewCell. Выбранная ячейка определяется данными, которые передаются в событии.

Для этого я создал наблюдателя NSNotification в MainViewController. Он прослушивает событие от SecondUIViewController и получает данные от него через userInfo.

Я также знаю, что из MainViewController я могу легко установить selectedIndex на UITabBarController, чтобы отобразить правильную вкладку. (№ 1 выполнено).

Однако выполнение # 2 меня перегородок. Я не знаю, как (правильно, правильно) установить selectedIndex на панели вкладок, а затем активировать действие FourthUiViewController на выбранную ячейку. Мое предположение заключается в том, что FourthUIViewController, возможно, не был загружен до возникновения этого события, поэтому я не мог установить какие-либо параметры или вызвать каких-либо наблюдателей.

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

TIA.

ответ

0

При необходимости в уведомлении может быть много получателей. Почему бы вам не попросить другое мнение просто прослушать одно и то же уведомление и выбрать нужную таблицу на основе UserInfo.

Я понял это правильно?

+0

Я считаю, что другой контроллер представления не может быть инициализирован во время вызова события (и, следовательно, не сможет прослушать событие). Это предполагает, что контроллеры представлений инициализируются до тех пор, пока их вкладка не будет выбрана. – pschang

+0

В этом случае может быть возможно использовать NSUserDefaults для передачи этой информации. Вы пишете UserData в NSUserDefaults и новые элементы представления из этого пространства при первой загрузке. После загрузки он может прослушивать данные из уведомления. –

1

Контроллер Контроллер всегда будет загружен при запуске, если только вы не сделали что-то очень странное с вашим файлом NIB.

Вполне возможно, что не будет загружен вид контроллера, но вы можете заставить, чтобы это произошло, вызвав [fourthController view] (или, в случае необходимости, [self view]), прежде чем манипулировать таблицу, в которой представления.