3

私のアプリは を使用して設計されておりUITabBarController、アプリのデリゲートからその上にビュー (ログイン画面) を表示しようとしています。次のコードを使用する場合:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
tabBarController = [[UITabBarController alloc] initWithNibName:@"Main_TabBarController" bundle:nil];
self.window.rootViewController = tabBarController;
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
Login_ViewController *lvc = [storyboard instantiateViewControllerWithIdentifier:@"Login_ViewController"];

[self.window.rootViewController presentViewController:lvc animated:YES completion:nil];

エラーが発生Warning: Attempt to present <Login_ViewController: 0x716fac0> on <UITabBarController: 0x7165240> whose view is not in the window hierarchy!し、画面が真っ黒になります。Login_ViewControllerウィンドウ階層に追加するにはどうすればよいですか?

4

2 に答える 2

3

いつでも現在のルート ビュー コントローラーを取得し、それを使用してログイン コントローラーを表示できます。

UIViewController *presentingController = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
[presentingController presentViewController:viewController animated:YES completion:nil];

さらに、ログイン画面の外観に応じて、UIModalPresentationFormSheet を使用してログイン コントローラーをプッシュします。

viewController.modalPresentationStyle = UIModalPresentationFormSheet;
于 2012-10-26T16:51:22.047 に答える
0

UI を作成するために 2 つの異なるメカニズムを使用しています。タブ バー コントローラーをストーリーボードに移動する必要があります。ストーリーボードをインスタンス化すると、新しいインスタンスとルート コントローラーとしての最初のコントローラーでウィンドウが上書きされます。

エラー メッセージは、タブ バー コントローラーのビューがビュー階層にないことを示しており、その逆ではありません。

アプリケーションのロゴだけで構成されるビューを持つコントローラーを作成し、このコントローラー内で、ログイン画面に移動する必要があるかどうかを判断します (永続的なログインがある場合)。次にログイン画面からタブバーコントローラーに遷移します。

ロードしているストーリーボードがメインのストーリーボードでない限り、手動でロードする必要はありません。ストーリーボードをアプリケーションのメイン ストーリーボードとして設定できるはずです。iOS はストーリーボードを自動的に読み込みます。

于 2012-10-26T16:20:25.243 に答える