構造は
loginViewController -->modal segue--> tabBarController
|
|
|-->NavController->Item1ViewController
|
|-->NavController->Item2ViewController
|
|-->NavController->Item3ViewController
現時点では、アイテム 2 の最初の viewController からプッシュすると、2 番目のタブ アイテムの「プッシュ」によってタブ バー コントローラー全体が押し出されます。
(一貫性のために)loginViewController にナビゲーション バーが必要な場合は、それを独自の navigationController に埋め込みますが、そこから先に進まないようにしてくださいmodal
。[self presentViewController:tabBarViewController animated:yes completion:nil]
タブ バー アイテムのナビゲーション コントローラーはそれぞれオプションです (目的のナビゲーションによって異なりますが、明らかにアイテム 2 に 1 つ必要です)。ただし、一貫性を保つために各アイテムに 1 つ必要な場合があります。
update
@rdelmar は、ログイン画面をルート ビュー コントローラー (その上にアプリの残りの部分が「モーダル」に表示される) として使用するこの方法は、モーダル セグエの誤用であると示唆し、ログイン画面をモーダルに表示することを提案しています。代わりに最初のタブ項目。私はその点を理解しており、もう少し考えますが、同様に、その代替手段は少し不快だと思います...タブ項目はtabVCで同じ重みを共有する必要があります-最初の項目に、アプリ全体が依存するモーダルログインコントローラーを提示しますプログラムの流れが良くない。アプリがユーザーのログインを必要とする場合、ログインが何らかの形でそれを支えていることに問題はありません。
ここの回答で、これのより完全に説明されたバージョンがあります:( How to handle UINavigationControllers and UITabBarControllers iOS 6.1 )。これには、アプリのどこからでもログアウト ボタンを提供する場合、最初のログイン画面に戻るセグエをアンワインドして、ログインしているアプリ スタック全体を効果的に非表示にするという利点もあります。
別の解決策 - @rdelmar's と一致する - ログイン画面がタブ バー コントローラーにない場合、最初の viewController からモーダルにログイン画面を表示することです。ログイン後の最初の画面はnavControllerに埋め込まれたviewControllerだったので、これは前述の回答でうまくいった可能性があります。ただし、巻き戻しからログアウトまではそれほどきれいではありませんでした。
結局のところ、フロー ロジックが堅牢なままである限り、これはあまりこだわるべきではないスタイルのポイントにすぎないのではないかと思います。