2014-12-10 3 views
0

Я использую раскадровку, и я установил UITabBarController в качестве корневого контроллера. У меня есть 3 вкладки на панели вкладок, и для первого я имею UINavigationController. Я хочу, чтобы контроллер корневого представления этого контроллера навигации был динамически установлен: у меня есть два кандидата в контроллере просмотра в зависимости от параметра, предоставленного пользователем.Программируемое изменение корневого контроллера UINavigationController

Я пытаюсь сделать, как это в AppDelegate:

UIStoryboard *storyboard = self.window.rootViewController.storyboard; 
if (condition1) { 
    UINavigationController *navViewController = [storyboard instantiateViewControllerWithIdentifier:@"navController"]; 
    UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"homeController1"]; 
    [navViewController setViewControllers:@[viewController]]; 

} else if (condition2) { 
    UINavigationController *navViewController = [storyboard instantiateViewControllerWithIdentifier:@"navController"]; 
    UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"homeController2"]; 
    [navViewController setViewControllers:@[viewController]]; 

Но это не работает. В раскадровке у меня нет ни одного не для homeController1 nor homeController2`. Как я могу это сделать?

Благодаря

+0

Когда вы говорите «это не работает», что происходит, это отличается от ожидаемого? Вы подтвердили, что все переменные не равны нулю? – oltman

+0

@oltman Это означает, что диспетчеры просмотра не загружены ... да, я проверил, что получаю ненулевые ссылки при создании экземпляра из раскадровки – AppsDev

ответ

0

Если я вас правильно понял вы пытаетесь запустить другой контроллер представления в зависимости от состояния. Вы можете попробовать это в своем делете приложения.

UIStoryboard *storyboard = 
    [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 

if (yourCondition) { 
    UIViewController *viewController = 
    [storyboard instantiateViewControllerWithIdentifier:@"tutorialView"]; 
    self.window.rootViewController = viewController; 
} else { 
    UIViewController *viewController = [storyboard 
     instantiateViewControllerWithIdentifier:@"mainViewController"]; 
    self.window.rootViewController = viewController; 
} 
+0

Это более или менее то, что я пытаюсь сделать, кроме факт, что контроллеры условных представлений не являются 'window.rootViewController' ... но никакой контроллер просмотра не загружается с помощью кода, который я разместил ... – AppsDev

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