Как получить доступ к контроллеру навигации из приложения делегата? - PullRequest
1 голос
/ 15 октября 2011

Я создаю приложение с push-уведомлениями и хочу, чтобы приложение показывало контроллер модального представления или выдвигало представление на текущий контроллер навигации при получении уведомления.У меня есть didReceiveRemoteNotification в моем делегате приложения, который получает уведомление, но теперь я не могу нажать контроллер представления, потому что у меня нет доступа к контроллеру навигации (или чему-либо, что я могу использовать).Я видел другие посты, где они создают контроллер навигации и делают все в делегате приложения, но я использовал конструктор интерфейса, поэтому для меня не очевидно, как я могу получить к нему доступ.Как лучше всего подтолкнуть новый контроллер вида или показать модал?

Спасибо за любые советы / предложения!

Ответы [ 3 ]

2 голосов
/ 02 марта 2012

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

Из вашего дома Вид:

IQAppDelegate *appDelegate = (IQAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate setNaviController:[self navigationController]];
1 голос
/ 15 октября 2011

Вы можете повторно опубликовать информацию от делегата приложения, используя NSNotificationCenter, и ваш логический вид вызова вызывает addObserver, чтобы он получал это уведомление.

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

0 голосов
/ 15 октября 2011

Вместо того, чтобы пытаться получить доступ к контроллеру навигации через AppDelegate, я бы рекомендовал добавить класс Singleton, который обрабатывает экраны во всем приложении.Этот менеджер экрана будет отвечать за добавление / удаление / переключение между представлениями, при этом следя за тем, чтобы все ваши контроллеры представлений освобождались должным образом, когда закончите с.Таким образом, вы можете получить доступ к текущему экрану, на котором вы находитесь, и представить контроллер модального представления, как вы говорите, что хотите (Убедитесь, что все ваши контроллеры представления реализуют определенный протокол, который объявляет метод для этого, ради чистой и правильнойкодирование).Удачи!

...