5

У меня проблема с навигационным контроллером в AppDelegate. Я использую раскадровку, которая выглядит следующим образом:Как использовать настраиваемый навигационный контроллер в AppDelegate с помощью раскадровки

Storyboard

В результате использования уведомлений Push, я получил следующую функцию в моей AppDelegate Файл:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
//... 
} 

Когда Прибытие уведомления. Я хочу инициализировать «Детальный вид» - контроллер, которому требуется идентификатор в качестве параметра. Этот идентификатор является частью моей полезной нагрузки, поэтому он присутствует в didReceiveRemoteNotification.

Я хотел бы к follwing:

DetailView *detail = [storyboard instantiateViewControllerWithIdentifier:@"detail"]; 

detail.conversationID = theID; 

[self.navigationController pushViewController:detail animated:YES]; 

Мой вопрос в данный момент: как я могу получить навигационный контроллер? Я искал функцию типа getNavigationControllerByIdentifier или что-то вроде этого, но ничего не нашел. Я не могу создать экземпляр элемента управления деталями напрямую, потому что там нет навигационной панели.

Я надеюсь, вы понимаете, что я имею в виду - если вы думаете, что мой подход является укомплектовать неправильно, пожалуйста, поправьте меня; о)

Просто еще одна небольшая информация: Это не важно для меня, что кнопка назад в деталях View Controller идет вернуться к представлению таблицы - этого достаточно, когда он связывается с контроллером с помощью кнопки «Загрузить таблицу».

Благодарим за помощь!

ответ

8

UINavigationController является подклассом UIViewController, а также может быть назначен идентификатор в раскадровке.

Используйте -instantiateViewControllerWithIdentifier: для создания UINavigationController и его контроллера корневого вида. Возможно, вам понадобится создать экземпляр всех промежуточных контроллеров в коде и изменить свойство навигационного контроллера viewControllers, чтобы настроить соответствующий стек навигации. Таким образом, когда приложение запустится в подробное представление, они смогут найти обратный путь назад, как если бы они вручную проталкивались через весь интерфейс.

+0

спасибо. Теперь это понятно и работает :-) (Bounty доступен только через 10 часов, поэтому не беспокойтесь, o)) –

4

Вы можете использовать rootViewController на своем объекте окна.

UIViewController *rootViewController = self.window.rootViewController; 
// You now have in rootViewController the view with your "Hello world" label and go button. 

// Get the navigation controller of this view controller with: 
UINavigationController *navigationController = rootViewController.navigationController; 

// You can now use it to push your next view controller: 
DetailViewController *detail = [navigationController.storyboard instantiateViewControllerWithIdentifier:@"detail"]; 
detail.conversationID = theID; 
[navigationController pushViewController:detailViewController animated:YES]; 
Смежные вопросы