2011-06-24 8 views
7

私はかなり複雑なiPadアプリを書いています - 私の最初の大きなアプリ。UITableViewのデリゲートとデータソースとしてのカスタムUIView?

このアプリには、表を含むかなり複雑なデータを表示するカスタムUIViewがいくつかあります。これらのビューは画面全体を占めず、いつでも画面上に表示されます(表が表示されている「展開」状態にあるのは1つだけです)。

はここで基本原理を伝えなければならない基本的な例です:Made with the nice Antetype prototyping app

これらの事をpopoversにすることになっていないことに注意してください。代わりに、FamilyViewsが展開されて詳細データが表示されます。 (また、このモックアップはこの質問のためだけに作成されたものであり、私のインターフェースがどのように見えるかとはほとんど関係がありません)。

私は未定です現在の画面のデリゲートのためののViewControllerを作る

  • 、それはVCのメインビューの一部だひとつのテーブルではないので、データソースは、unelegantです:誰がこれらのカスタムビューのデリゲートとデータソースとして配置します。
  • ビューそれ自体、デリゲートとデータソースは、ビューをあまりにも積極的な役割を果たすように感じるので私には少し変わっているようです。それをハーフコントローラにします。
  • 下位のモデルオブジェクトを作成すると、データソースが強く結合されすぎているように見え、MVCも破損します。そして、それは代議員になるべきかという疑問に答えるものではありません。

私は、これらの "FamilyViews"のそれぞれを独自のテーブルのデリゲートとデータソースにする傾向があります。これらのテーブルに対するアクションは、FamilyViewのデリゲート(ViewController)に結合する必要がありますが、それは問題ではありませんか?

誰でもこれに関する入力がありますか?

答えて

6

ビューは、プロパティに応じて、自分自身をペイントしてサブビューをレイアウトする方法を知っている必要があります。

コントローラクラスをビュー自体ではなくデリゲートにする必要があります。

デリゲートコントローラは、ビューを表示するビューコントローラでなくてもかまいません。それは、ビューが必要とするものをどのように扱うかを知っているだけで、完全に別個のコントローラクラスであることが容易にできます。

+0

あなたの答えをありがとう。私はそれについて考えていた。だから私は新しいクラス 'FamilyMembersTableViewController'(それはviewControllerサブクラスではない)を作成し、新しいtableViewを表示する必要があるたびにそのインスタンスをインスタンス化するべきだと言っていますか?そして、これは 'ファミリー'モデルと 'ファミリービュー'の間の中間の役割を果たしますか?これはMVCをきれいに保ちますが、FamilyViewsはあまりにも特殊化されており、tableControllerと密接に結びついているため、少し不必要なようです。 – fzwo

+0

私は別のコントローラーが最適なソリューションだと思います。 ver。あなたのアプリの2.0は、あなたはこの驚くほどクールなものを実装するだろう、それはコントローラで意味をなさないだろう、そしてあなたはリファクタリングする必要があります。今MVCのやり方に従えば、後で自分自身に感謝するでしょう。 :) –

+0

これについてもっと考えると、これが行く方法であることが明確になります。私はこれを実装しましたが、悪影響はありません。私はこのクラスに名前をつけるべきですか?この例にとどまるために、 'FamilyMemberTableViewController'は明白で混乱しているようです。 'UITableViewController'も' UITableViewController'サブクラスではありませんが、 '* UITableView'のための*コントローラです。) – fzwo

関連する問題