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

Можно ли переопределить контроллер представления по умолчанию из раскадровки, чтобы вместо него показать другой контроллер? Все это, конечно, произойдет в AppDelegate.

 Jacksonkr16 мая 2012 г., 01:43
@ Martol1ni да, ты сказал именно то, что я ищу.
 Jacksonkr16 мая 2012 г., 02:04
Не толькоUIViewControllers. У меня есть два из них, и один по умолчанию. НаmyBool == YES Я хочу открыть приложение с моим вторым контроллером вместо стандартного.
 Martol1ni16 мая 2012 г., 01:55
Вы используете UINavigationController?
 Martol1ni16 мая 2012 г., 01:19
ViewController по умолчанию объявлен в info.pList в последних SDK. Предполагается, что он проверяет что-то при запуске, а затем решает, какой viewcontroller нажать?

Ответы на вопрос(2)

так что у вас есть не два, а три представления. Один никогда не запускается, просто контролирует все остальные. Затем реализуйте в нем методы следующим образом:

- (void) decideViewController  {
    NSString * result;
    if (myBool) {
        result = @"yourIdentifier";
    }
    else {
        result = @"yourOtherIdentifier";
    }
    self.navigationController.navigationBarHidden = YES; // Assuming you don't want a navigationbar
    UIViewController *screen = [self.storyboard instantiateViewControllerWithIdentifier:@"view1ident"];
    [self.navigationController pushViewController:screen animated:NO]; // so it looks like it's the first view to get loaded
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self decideViewController];
}

Это никогда не выглядит так, как будто первое представление загружено. Если вы используете NIBS, вы можете делать все из AppDelegate, хотя ...

Решение Вопроса

@ Martol1ni Я хотел бы использовать ваш ответ, но я также хотел держаться подальше от ненужного беспорядка раскадровки, поэтому я немного подправил ваш код..

Я установил все следующее на контроллере по умолчанию.

- (void)gotoScreen:(NSString *)theScreen
{
    AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    UIViewController *screen = [self.storyboard instantiateViewControllerWithIdentifier:theScreen];
    [app.window setRootViewController:screen];
}

И тогда, когда произойдет логика, я при необходимости вызову следующее.

if(myBool == YES) {
    [self gotoScreen:@"theIdentifier"];
}

Ваш ответ на вопрос