2012-01-12 11 views
0

テーブルビューに表示される2つのタイプのアイテム(タイプaとタイプbと呼ぶことができます)を含む配列を持っています。タブバーを使用すると、それぞれのタブに異なるビューが関連付けられます

テーブルビューは、タイプaのアイテムだけが表示されるか、タイプbのアイテムだけが表示されるか、またはすべてのアイテムが表示され、対応する3つのタブのいずれかを押すことによって適用されるフィルタリングを制御できます。

これは、私のアプリのルートコントローラがタブバーコントローラでなければならないことを示しています。

それが唯一の要件であれば、私はタブバーコントローラになるだろう3つのテーブルビューコントローラを持っている、しかし、私はきれいな方法でそれを設計する方法がわからない別の要件があります:

あった場合空のテーブルビューの代わりに画像とテキストを表示する必要があります(画像とテキストはどのフィルタが選択されているかによって異なります)。だから、これはテーブルビューの背景画像を設定することで達成できたかもしれませんが、フィルタaが適用されている場合は画像/テキストに加えてボタンも表示されます - 私はテーブルビューのバックグラウンドとして設定することはできません。したがって、私は画像/テキスト/ボタンビューの表示を扱うために、別々のビューコントローラのセットが必要であることを暗示しています。

タブ・コントローラは、各フィルタに表示する項目があるかどうかによって、これらのビュー・コントローラをテーブル・ビュー・コントローラと動的に入れ替えることができますが、これは面倒です。

だから私はタブバーコントローラーが3つのナビゲーションコントローラーを所有している必要があり、各ナビゲーションコントローラーはアイテムがない場合はイメージ/テキスト/ボタンを表示するコントローラーをルートビューコントローラーとして持っていると思っていました。テーブルビューコントローラをスタックに追加します(項目数が0になるとポップする)。

これは有効なオプションですか?記述された振る舞いの標準的なパターンはありますか?

TIA

答えて

0

これは実際にはかなり簡単です。メインインターフェイスとしてUITabBarControllerを使用してください。各タブのビューコントローラはUIViewControllerのサブクラスで、UITableViewです。各テーブルビューコントローラは、そのタブに適切なデータをロードします。各タブが(フィルター以外の)同じように動作する場合、これはあなたのロジックが1つのコントローラーの実装になるのですばらしいです。タブごとに異なる動作が必要な場合は、大したことではなく、必要に応じてカスタマイズしてください。

+0

ありがとう、私はUITableViewControllerからUIViewControllerに変更するよう編集していますので、おそらくUITableViewを使用するよりも優れたアプローチだと思いますか? UITableViewControllerを使用してUIViewをコンテナビューとして作成し、その中に他のサブビュー(ImageView、UIButton、テーブルビュー)を配置できますか? UIViewControllerのサブクラスを作成することと比較した場合の短所/利点はありますか? – Gruntcakes

+0

あなたの質問は私がそれを変更した理由です。 'tableView'をコントローラのコンテナビューにしたくない場合は、' UIViewController'を使い始めます。それ以外に、 'UITableViewController'で始まる主な理由は' dataSource/delegate'が設定された 'tableView'であらかじめ設定されているからです。それ以外の場合、利点はありません。私は通常、 'UIViewController'を使い、独自の' tableView'を追加するのが簡単です。 – XJones

0

あなたがUITabBarControllerと一緒に行きたいようにこれは私には読みません。 UIViewの上部に3セグメントのUISegmentedControlを配置し、その下にUITableViewを配置することを検討してください。

次にあなたが

[segmentedControl addTarget:self 
        action:@selector(selectionChanged:) 
      forControlEvents:UIControlEventValueChanged]; 

を行うと、このアプローチは、あなたが内のすべてのロジックを配置することを可能にする方法で

-(void)selectionChanged:(id)sender; 

tableViewデータソースおよび/または背景イメージに必要な変更を実装することができます1 UIViewController

+0

ありがとう - 製品マーケティング部門がタブバーのように見えるようにしたい場合、タブバーの外観を模倣するようにセグメント化されたコントロールをカスタマイズすることは可能か簡単ですか? – Gruntcakes

+0

@Mungbeansいいえ、それは良い考えではありません。タブバーを使用する必要がある場合は、3つの異なるView Controllerが必要です。しかし、 'UITableViewController'のサブクラスに書いて、3つの別々のサブクラスを書くのではなく、3つのインスタンスを作成することができます。これは冗長性をかなり減らします。 – PengOne

関連する問題