2014-01-27 4 views
0

Я пишу приложение iOS с помощью раскадровки.iOS UINavigationController switch rootviewcontroller на основе условия

Я создал ViewControllerA, ViewControllerB, а затем встроен ViewControllerA в UINavigationController на раскадровке.

Приложение будет показывать ViewControllerA при первом запуске, в противном случае оно отобразит ViewControllerB.

Я успешно добавил код проверки истории запуска. Я собираюсь установить UINavigationController в качестве rootViewController окна в методе didFinishLaunchingWithOptions.

Проблема в том, что я не могу получить UINavigationController из раскадровки, поэтому я не могу нажать ViewControllerA и ViewControllerB на основе моего состояния.

ответ

0

Если вы используете раскадровку, тогда UINavigationController должен быть установлен как контроллер начального представления, и он будет загружен и отображен автоматически. Теперь, когда что-то происходит в ViewControllerA он может нажать ViewControllerB с помощью:

ViewControllerB *b = ...; 
[self.navigationController pushViewController:b animated:YES]; 

Для повышения фальсификации приложение делегат имеет window свойство. Отсюда вы можете получить rootViewController. Бросьте это на UINavigationController, и вы можете изменить/нажать. Установите его на что-то еще, и вы можете заменить UINavigationController все вместе.

+0

Я хочу показать ViewControllerA или ViewControllerB в качестве первого экрана. В приведенном выше методе можно скрыть ViewControllerA? – docodingwhile1

+0

Если я добавлю код в appdelegate, как я могу получить ViewControllerA и B из раскадровки в appdelegate? [self.storyboard instantiateViewControllerWithIdentifier: @ "ViewControllerA"]; Я нашел этот код, но self.storyboard недействителен в appdelegate. – docodingwhile1

+0

Ваше решение работает хорошо. – docodingwhile1

Смежные вопросы