Доступ к другим представлениям стека навигации - PullRequest
0 голосов
/ 05 августа 2009

Итак, у меня есть UINavigationController, который, очевидно, содержит все мои ViewController.

У меня три.

Root-> View2-> View3.

Так что мне было интересно, возможно ли следующее ...

Когда я нахожусь в View3 (и экземпляр Root и View2 размещен в стеке навигации), могу ли я вызвать любой из View2 или методов корневого представления / отправить им сообщения?

Если так, как можно поступить? При необходимости я выложу пример кода.

Спасибо

Jon

Ответы [ 2 ]

4 голосов
/ 05 августа 2009

Предполагая, что вы находитесь в одном из контроллеров представления, вы можете сделать что-то вроде этого:

UIView* view2    = [self.navigationController.viewControllers objectAtIndex:1];
UIView* rootView = [self.navigationController.viewControllers objectAtIndex:0];

Теперь вы можете отправлять им любые сообщения.

2 голосов
/ 05 августа 2009

NSNotification очень хорошо работает для объектов, которые вы хотите свободно связать. В контексте Cocoa / iPhone это означает, что между ними нет ссылок, в основном.

В контроллере, который может получить сообщение:

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(doTheThing:) name: @"MessageBetweenControllers" object: nil];

В контроллере, которому необходимо отправить сообщение:

NSDictionary *dict = [NSDictionary dictionaryWithObject: <some object> forKey: @"key"];
[[NSNotificationCenter defaultCenter] postNotificationName: @"MessageBetweenControllers" object: self userInfo: dict];

Приведенный выше пример является просто шаблоном (например, бит NSDictionary является необязательным), но он показывает механизм. Прочтите документацию по NSNotification и NSNotificationCenter, чтобы получить подробную информацию.

Это не чисто теоретическое. Это основной метод, который я использую для связи между объектами в трех моих опубликованных приложениях, а также в новом. Накладные расходы на уведомления в миниатюре.

Две ошибки: убедитесь, что вы добавляете addObserver только один раз для каждого сообщения - NSNotificationCenter не отбирает дубликаты; если вы вставите одного и того же наблюдателя дважды, он получит сообщение дважды. Кроме того, убедитесь, что вы делаете removeObserver в своем методе dealloc (снова, см. Docs.)

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