1. ホーム
  2. iphone

ナビゲーションコントローラー内のタブバーコントローラー、またはナビゲーションルートビューの共有

2023-07-20 15:11:09

質問

のように構造化されたUIを実装しようとしています。 Tweetie トップレベルのビューコントローラーはナビゲーションコントローラーのようで、そのルートビューは "Accounts"テーブルビューです。 トップレベルのビューコントローラーはナビゲーションコントローラーのようで、そのルートビューは "Accounts"テーブルビューです。 各タブ項目は異なるリストを表示し、さらにドリルダウンすることができます (後続のレベルではタブバーは表示されません)。

ということで、実装の階層はこのような感じです。

  • UINavigationController
    1. アカウント : UITableViewController
    2. UITabBarController
      1. ツイート : UITableViewController
        • ツイート/ユーザー/等の詳細表示
      2. 返信 : UITableViewController
      3. ...

これは動作するように見えますが[^1]、SDK のドキュメントによれば、以下のようにサポートされていないようです。 -pushViewController:animated: の SDK ドキュメントによるとサポートされていないようです (強調)。

ビューコントローラ : スタックにプッシュされるビューコントローラーです。 タブバーコントローラのインスタンスであってはならない。

プライベートAPIなどは避けたいのですが、問題なく使えそうなのに、なぜこの使い方が明示的に禁止されているのかが分かりません。 どなたか理由をご存知でしょうか?

タブバーコントローラーをメインコントローラーとして、各タブに別々のナビゲーションコントローラーを入れることを考えたことがあります。 この問題は、各ナビゲーション コントローラが単一のルート ビュー コントローラを共有する必要があることです (すなわち、" Accounts" テーブルが Tweetie ) -- これはうまくいかないようです。テーブルコントローラを2番目のナビコントローラにプッシュすると、1番目のコントローラから削除されるようです。 テーブル コントローラーを 2 番目のナビゲーション コントローラーにプッシュすると、最初のコントローラーから削除されるようです。

どのように私はこれを正しい方法で実装すべきでしょうか?

[^1]: タブバーコントローラはサブクラス化する必要があり、そのレベルのタブバーコントローラのナビゲーションアイテムは選択されたタブのナビゲーションアイテムと同期したままであり、個々のタブのテーブルコントローラはそれぞれの詳細ビューを self.tabBarController.navigationController ではなく self.navigationController .

どのように解決するのですか?

前の2つの回答は正しいです。 UITabBarController を使用していません。 カスタム XXTabBarController (のプレーンなサブクラス)を書くのはとても簡単です。 UIViewController のサブクラス)であり、ナビコントローラスタックに押し出されることを喜んでいますが、まだ "ビューコントローラ" の哲学によって生きています。 アカウント固有のビューの各「タブ」( Tweets / Replies / Messages ) はそれ自身のビューコントローラであり、それらに関する限り、画面上で入れ替わるのは、単純な ol UITabBarController .