5

ストーリーボードには複数のUINavigationControllerスタックがあります。たとえば、LoginViewControllerスタックはスタックから完全に分離されていSWRevealViewControllerます。

それらを切り替えるためのベストプラクティスは何ですか? ログアウト ボタンを押して (ログアウト ボタンはSWRevealControllerスタック上にあります)、LoginViewController スタックを表示しようとすると、次のようなエラーが発生します。

Warning: Attempt to present LoginViewController on SWRevealViewController whose view is not in the window hierarchy!

私は特にself.window.rootViewControllerLogin View ControllerのUINavigationControllerApp Delegateに次のように設定していますが:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Spitfire" bundle:nil];
UINavigationController *nav = [storyboard instantiateViewControllerWithIdentifier:@"LoginNavigationController"];
LoginViewController *loginVC = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"];

self.window.rootViewController = nav;
[nav presentViewController:loginVC animated:NO completion:nil];    

現在のスタックを「破棄」しUINavigationControllerて新しいスタックを使用する方法はありますか? それとも、アプリのデリゲートでこのコードを呼び出すべきではないでしょうか?

4

3 に答える 3

0

編集:

メソッドで rootviewControllerpresentViewControllerから呼び出すUINavigationcontroller'sviewDidAppear:

-(void)viewDidAppear:(BOOL)animated {

   LoginViewController *loginVC = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"];
   [self presentViewController:loginVC animated:NO completion:nil];
   [super viewDidAppear:YES];
}
于 2013-11-08T06:39:51.883 に答える
0

rootViewController で viewDidAppear が表示されるまで、presentViewController を呼び出すのを待つ必要があります。

詳細については、こちらを参照してください:ビューがウィンドウ階層にない

于 2013-11-08T06:16:53.240 に答える