UITableViewController withing UITabBarControllerは表示されません。
-
20-08-2019 - |
質問
私は面白い状況に走ってきた、私は3 UITableViewController
sがそれぞれ(あなたはそれがフィルタリングの問題だと言うことができます)多かれ少なかれ同じデータを表示してiPhoneアプリを持っています。これまでに私はさらにUINavigationController
sは上のボタンのためにUITabBarController
内部にあったが、それ自身のコントローラで、このための3つの個別ニブ、それぞれを持っています。
は、今すぐアプリを最適化し、それは足跡だ減らすために、私は1つの共通のコントローラ(UITabBarItem
)へのすべてのロジックをパックし、所定の位置に一つだけNIBを残しました。一般的なコントローラは、データをフィルタリングし、正しいデータを指しているの世話をするでしょう。
だから、私はナビゲーションコントローラの3にある[同じの共通のコントローラをロードします:
navControllerA = [[UINavigationController alloc] initWithRootViewController: commonTableController];
とUIWindow
これらのナビゲーションコントローラを追加しました:
navigationControllersArray = [NSArray arrayWithObjects: navControllerA, navControllerB, navControllerC, nil];
[tabController setViewControllers:[NSArray arrayWithArray:navigationControllersArray]];
これで、すべてのタブの表示は、結構です、テーブルビューが表示します。あなたは次の手を触れUITabBar
し、以前のものに戻すしかし、一度<=>あなたはそれだけの場所で<=>を見ることができ、表示されません。 <=>が最後に触れただけのために表示されたまま<=>。
私は認識していないよビューローディング機構<=>のいくつかの種類がありますか?
解決
各ビューコントローラは一つだけナビゲーションコントローラのスタックにすることができ、そしてそれは、スタック上のいくつかの場所ですることはできません。
あなたが本当に一つだけのビューコントローラを使用してメモリを節約したい場合は、、私の代わりにタブバーコントローラを使用しての、あなただけのタブバーのビューを使用し、そのデリゲートとしてあなたルートビューコントローラを設定することをお勧めします。ルートビューコントローラは、直接タブバーのイベントを解釈し、それに応じてフィルタリングを変更します。
他のヒント
、それはそうです。タブバーは、他のすべてのポスターが述べたように、すべてのビュー1つのビューと1つのナビゲーションコントローラの子である必要はありビューの切り替えについてです。データセットがはるかに意味をなすか、あるいは(あなたは三つの要素を持っているし、あなたが唯一の最大3つのセグメントを持つことができるので)もうまくいくでしょうUISegmentedControlを使用して切り替えるには、この単一のコントローラを呼び出し、タブバーを持っています。
UINavigationController内UITabbarControllerを使用することはサポートされていません。あなたは、スタックを表示するためにプッシュすることができUITabbbarControllerを模倣するために、通常のUIViewControllerを書くことができます。この SO質問を参照してください。 >。