2

App DelegateからView Controllerを条件付きでロードする方法はありますか?

では、例えばこんなことができるでしょうか?

    if (hasUserSignedUp) {
        nav = [[navController alloc] initWithNibName:nil bundle:nil];
        [window addSubview:nav.view];
        [window makeKeyAndVisible];
    }
    else {
        su = [[SignUpViewController alloc] initWithNibName:nil bundle:nil];
        [window addSubview:su.view];
        [window makeKeyAndVisible];
    }
4

4 に答える 4

1

これは確かに可能ですが、どちらの場合もナビゲーション コントローラーをロードし、サインアップしているかどうかに応じて別のルート ビュー コントローラーを使用することをお勧めします。

if (hasUserSignedUp) {
    nav = [[UINavigationController alloc] initWithRootViewController:rootViewController];
}
else {
    su = [[SignUpViewController alloc] initWithNibName:nil bundle:nil];
    nav = [[UINavigationController alloc] initWithRootViewController:su];
}

[window addSubview:nav.view];
[window makeKeyAndVisible];

アプリの削除はビュー階層のルートを作成する必要があり、そこから必要に応じて操作できます。

私があなたなら、上記のコードを使用し、サインインまたはサインアップしたら、通常のルート ビュー コントローラーをプッシュしてから、ナビゲーション スタック スタックを変更します。

[self.navigationController pushViewController:rootViewController animated:YES];

double delayInSeconds = 0.5f;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    self.navigationController.viewControllers = [NSArray arrayWithObject:self.navigationController.viewControllers.lastObject];
});

これはこれを行うための最もクリーンな方法ではありません ( dispatch_after) が、どのように行われるかがわかります。rootViewController が にhidesBackButton設定されていることを確認してくださいYES

于 2012-04-13T23:41:19.203 に答える
1

はい、非常に便利です。これを行うための制限はありません。

ただし、ビューを追加するのではなく、rootViewController を設定した方がよいと思います。

self.window.rootViewController = nav;//or su;
于 2012-04-13T23:34:08.130 に答える
0

はい、確かにそのようにできます。

于 2012-04-14T19:45:36.360 に答える
0

set rootViewController は良い習慣です

于 2012-04-14T01:26:04.693 に答える