Я разрабатываю приложение с использованием раскадровки, которое имеет следующую структуру:
- TabBarController (2 Tab Bars) - Initial View Controller
o NavigationController1
• RegistrationPage - UIViewController (candidate for rootview)
• DoActivityPage - UIViewController (candidate for rootview)
o NavigationController2
• View Controller 1
Когда приложение запускается в первый раз, я хочу показать пользователю RegistrationPage, а в последующие разы пользователю будет представлен DoActivityPage. Поскольку обе эти страницы находятся на одном уровне, каждая из них является потенциальным кандидатом на роль корневого контроллера представления.
Я использую макет раскадровки, поэтому визуально я могу сделать только одно из представлений как rootViewController, что не служит моей цели. Итак, я знаю, что мне придется добиться этого программно, и я много пробовал в Google, но не смог найти способ сделать это.
Мой вопрос: как мне программно установить контроллер корневого представления (из нескольких контроллеров корневого представления) для контроллера навигации, имея в виду, что я использую раскадровку?
В настоящее время я вижу черную страницу, когда приложение запускается с выбранным элементом 1-й вкладки. Если я добавлю следующий код в AppDelegate.m, я увижу страницу, но пустые нижняя и верхняя панели:
UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
RegistrationPage *rp = [navController.storyboard instantiateViewControllerWithIdentifier:@"RegistrationPage"];
navController.viewControllers = [NSArray arrayWithObjects: rp, nil];
@Michael Я пробовал подобный код раньше, но проблема в том, что, поскольку я использую раскадровку, единственный способ получить доступ к tabBarController - это:
self.window.rootViewController.tabBarController
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:self.window.rootViewController.tabBarController];
И, когда я попытался использовать приведенный выше код, я получаю сообщение об ошибке. Приложение пыталось нажать на цель контроллер нулевого представления.