0

私は興味深い状況に遭遇しました.3つUITableViewControllerのiPhoneアプリがそれぞれ多かれ少なかれ同じデータを表示しています(フィルタリングの問題だと言えます)。これまでに、このために 3 つの個別の NIB があり、それぞれに独自のコントローラーがあり、さらに上部のボタンのためにUITableViewControllers が内部にありました。UINavigationController

ここで、アプリを最適化してフットプリントを削減するために、すべてのロジックを 1 つの共通コントローラー ( UITableViewController) にパックし、NIB を 1 つだけ残しました。共通コントローラーは、データをフィルター処理して正しいデータを指すようにします。

したがって、同じ共通コントローラーを 3 つのナビゲーション コントローラーにロードします。

navControllerA = [[UINavigationController alloc] initWithRootViewController: commonTableController];

これらのナビゲーション コントローラを に追加しましたUITabBarController:

navigationControllersArray = [NSArray arrayWithObjects: navControllerA, navControllerB, navControllerC, nil];
[tabController setViewControllers:[NSArray arrayWithArray:navigationControllersArray]];

タブが表示され、テーブル ビューが表示されます。しかし、次のものをタッチして、表示UITabBarItemされていない前のものに戻ると、その場所にUITableViewControllerのみ表示UIWindowされます。はUITableViewController最後に触れたときだけ表示されますUITabBarItem

UITabBar私が気付いていないある種のビュー読み込みメカニズムはありますか?

4

2 に答える 2

1

各ViewControllerは、1つのナビゲーションコントローラーのスタックにのみ存在でき、そのスタックの複数の場所に配置することはできません。

1つのビューコントローラーのみを使用してメモリを節約したい場合は、タブバーコントローラーを使用する代わりに、タブバービューを使用してルートビューコントローラーをデリゲートとして設定することをお勧めします。ルートビューコントローラは、タブバーイベントを直接解釈し、それに応じてフィルタリングを変更します。

于 2009-03-19T20:57:38.917 に答える
0

1つのビュー内でデータセットを本当に切り替えたい場合は、タブバーではなくツールバーを使用する方がよいと思われます。タブバーはすべてビューの切り替えに関するものですが、他のポスターが指摘しているように、すべてのビューは1つのビューと1つのナビゲーションコントローラーの子である必要があります。この単一のコントローラーを呼び出してデータセットを切り替えるタブバーを使用する方がはるかに理にかなっています。そうでない場合は、UISegmentedControlを使用することも適切に機能します(3つの要素があり、最大3つのセグメントしか使用できないため)。

于 2009-03-20T22:17:34.723 に答える