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