1

これが私のアプリのセットアップです:

ナビゲーション-

-loginVC -ログインが有効な場合、セグエをプッシュします-

    tab bar controller with 3 tabs:
      -in the first tab, is a profile display which modal pushes to a profile editor(not
       issue here)
      -second tab is a searchVC that pushes to a tableVC that shows results. This is  
       where the tab bar disappears
      -The third view is just a VC for updating the database this is linked to.

これは文字通りストーリーボードでの動作方法であり、searchVC から tableVC へのセグエがプッシュ セグエであることを確認しました。

この 2 番目のビューでタブ バー コントローラーが消えないようにするにはどうすればよいですか。

4

2 に答える 2

2

構造は

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だったので、これは前述の回答でうまくいった可能性があります。ただし、巻き戻しからログアウトまではそれほどきれいではありませんでした。

結局のところ、フロー ロジックが堅牢なままである限り、これはあまりこだわるべきではないスタイルのポイントにすぎないのではないかと思います。

于 2013-04-10T03:14:55.490 に答える
0

言及していない別のナビゲーション コントローラーがない限り、プッシュは最初のコントローラーであるナビゲーション コントローラーから行われます。したがって、そこからプッシュすると、tableVC がナビゲーション コントローラーのビュー コントローラーのタブ バー コントローラーの上に配置されます。

タブ バー コントローラーをウィンドウのルート ビュー コントローラーにすることをお勧めします。loginVC を最初のタブのコントローラーから (その viewDidAppear メソッドから) モーダルに提示して、アプリの起動時に最初に表示されるようにします。2 番目のタブには、ルート コントローラーとしてナビゲーション コントローラーがあり、ナビゲーション コントローラーのルート ビュー コントローラーとして searchVC が必要です。

于 2013-04-10T03:14:14.523 に答える