Как вручную выбрать исходную раскадровку без списка в App Delegate?

Мне нужно иметь возможность выбрать раскадровку с ее начальным UIViewController при запуске приложения для логического выбора. Каждая раскадровка работает... в соответствии с.plist (оригинальной) установкой.

Поэтому я удалил исходную запись раскадровки по умолчанию в списке приложений; и попытался сделать это вручную.

То, что я получил, это черный экран на моем устройстве.
Переменные "раскадровка", "контроллер", "окно" не равны нулю. Все же я не получаю экран. Зачем?

Вот код:

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    UIColor *blissRed = [UIColor colorWithRed:228.0/255.0 green:0.0 blue:27.0/255.0 alpha:1.0];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.tintColor = blissRed;

    BOOL introStoryboard = YES;  // ...artificial condition for discussion.

    UIStoryboard *storyboard;
    UIViewController *controller;

    if (introStoryboard) {
        storyboard = [UIStoryboard storyboardWithName:@"Intro" bundle:nil];
        controller = [storyboard instantiateViewControllerWithIdentifier:kIntroStoryboardBeginning];
    } else {
        storyboard = [UIStoryboard storyboardWithName:@"Bliss" bundle:nil];
        controller = [storyboard instantiateViewControllerWithIdentifier:kBlissStoryboardBeginning];
    }

    [self.window setRootViewController:controller];

    return YES;
}


@end

2 ответа

Решение

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

[self.window makeKeyAndVisible];

Я был в ситуации один раз. Я решил это, сделав

[navigationController pushViewController:controller animated:YES];

Так что вам нужно сделать, это -

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    UIColor *blissRed = [UIColor colorWithRed:228.0/255.0 green:0.0 blue:27.0/255.0 alpha:1.0];
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.tintColor = blissRed;

    BOOL introStoryboard = YES;  // ...artificial condition for discussion.

    UIStoryboard *storyboard;
    UIViewController *controller;
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;

    if (introStoryboard) {
        storyboard = [UIStoryboard storyboardWithName:@"Intro" bundle:nil];
        controller = [storyboard instantiateViewControllerWithIdentifier:kIntroStoryboardBeginning];
} else {
        storyboard = [UIStoryboard storyboardWithName:@"Bliss" bundle:nil];
        controller = [storyboard instantiateViewControllerWithIdentifier:kBlissStoryboardBeginning];
}

   [navigationController pushViewController:controller animated:YES];

return YES;

}

Другие вопросы по тегам