Tweetieアプリのように構造化されたUIを実装しようとしています。これは、そのように動作します。トップレベルのビューコントローラーはナビゲーションコントローラーのようで、そのルートビューは「アカウント」テーブルビューです。アカウントをクリックすると、下部にタブバーがある第2レベルに移動します。各タブ項目には異なるリストが表示され、さらにドリルダウンできます(後続のレベルにはタブバーは表示されません)。
したがって、これは実装階層が次のようになります。
UINavigationController
- アカウント:
UITableViewController
UITabBarController
- ツイート:
UITableViewController
- ツイート/ユーザーなどの詳細ビュー
- 返信:
UITableViewController
- ..。
- ツイート:
- アカウント:
これは機能しているようです[^ 1]が、SDKのドキュメントによるとサポートされていないようです-pushViewController:animated:
(強調が追加されています)。
viewController:スタックにプッシュされるビューコントローラー。タブバーコントローラーのインスタンスにすることはできません。
プライベートAPIなどは避けたいのですが、うまくいくように見えても、なぜ明示的に禁止されているのかわかりません。誰もが理由を知っていますか?
タブバーコントローラーをメインコントローラーとして配置し、各タブに個別のナビゲーションコントローラーを含めることを検討しました。これに伴う問題は、各ナビゲーションコントローラーが単一のルートビューコントローラー(つまり、Tweetieの「Accounts」テーブル)を共有する必要があることです-これは機能していないようです:テーブルコントローラーを2番目のナビゲーションコントローラーにプッシュすると、それが削除されるようです最初から。別のアカウントを選択するときのすべての簿記は言うまでもなく、おそらく苦痛でしょう。
これを正しい方法で実装するにはどうすればよいですか?
[^ 1]:タブバーコントローラーは、そのレベルのタブバーコントローラーのナビゲーションアイテムが選択したタブのナビゲーションアイテムと同期し続けるようにサブクラス化する必要があり、個々のタブのテーブルコントローラーはそれぞれの詳細ビューをself.tabBarController.navigationController
ではなくにプッシュする必要がありますself.navigationController
。