Как использовать пользовательский Navigationcontroller в AppDelegate с помощью раскадровки - PullRequest
5 голосов
/ 08 января 2012

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

Storyboard

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

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

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

Я бы хотел следующее:

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

detail.conversationID = theID; 

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

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

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

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

Спасибо за помощь!

Ответы [ 2 ]

8 голосов
/ 10 января 2012

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

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

4 голосов
/ 10 января 2012

Вы можете использовать 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...