iOS 5 раскадровка, программно определить путь - PullRequest
18 голосов
/ 25 октября 2011

У меня возникли проблемы при использовании раскадровки:

Когда настройка не завершена: запустить приложение -> показать настройки просмотра контроллера -> показать основной контроллер навигации Когда настройка завершена: запустить приложение -> показать основной контроллер навигации

Итак, я хочу, чтобы в некоторых случаях приложение программно запускалось с представлением настроек, а в противном случае переходило прямо к главному навигационному контроллеру.

Мне удалось показать представление настроек с модальным стилем перехода от основного контроллера навигации, но я не знаю, как его отобразить до того, как отобразится основной контроллер навигации. Есть идеи?

Ответы [ 3 ]

29 голосов
/ 25 октября 2011

По умолчанию начальный контроллер представления из вашей основной раскадровки создается и отображается автоматически при запуске приложения. Чтобы этого не случилось, вам нужно удалить настройку UIMainStoryboardFile из вашего файла info.plist.

Если контроллер представления по умолчанию отсутствует, вы можете создавать его программно при запуске приложения. См. Документацию UIStoryboard . Используйте +storyboardWithName:bundle:, чтобы загрузить раскадровку, а затем используйте –instantiateViewControllerWithIdentifier:, чтобы создать правильный контроллер представления. Вам также нужно будет создать главное окно UIWindow и добавить к нему представление контроллера представления так же, как вы это делали с пользовательским интерфейсом на основе .nib. Обратите внимание, что без настройки UIMainStoryboardFile главное окно не будет создано для вас - прочтите объяснение .

20 голосов
/ 14 ноября 2011

Мне удалось сделать это немного по-другому:

  1. Используйте UINavigationController в качестве контроллера начального вида.
  2. Создайте контроллер корневого представления, который будет управлять решением о том, что загружать.
  3. Создание сегментов раскадровки от корневого контроллера представления к основному представлению и представлению настроек и присвоение соответствующим идентификаторам сегментов.
  4. Вызовите performSegueWithIdentifier с правильным идентификатором из вашего корневого контроллера представления.

Просто еще одно решение, надеюсь, это поможет.

3 голосов
/ 06 февраля 2013

Я сделал что-то похожее на amoshaviv, его совет здоров. Я сделал это немного по-другому, и я дам немного больше информации. Я создал собственный класс MyInitialViewController, производный от UIViewController, и сделал его начальным контроллером представления. В файле раскадровки я создал модальные сегменты с соответствующими именами для всех (в моем случае трех) возможных «реальных» контроллеров первого вида. В классе MyInitialViewController я реализовал

- (void)viewDidAppear:(BOOL)animated;

метод, чтобы сначала проверить, на какой вид переключаться, а затем сделать правильный

[self performSegueWithIdentifier:@"NameOfSegue" sender:self];

По сути, это делает MyInitialViewController не более чем переключателем, выполняемым при его отображении. Сначала я попытался сделать это при загрузке, потому что мне все равно, нужно ли на самом деле видеть это представление, но это не сработало, а viewDidAppear -.

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

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