2011-12-05 8 views
3

スタンフォードiTunesU CS193pのオンラインコースを見た後、私は、MVCデザインを実装する正しい方法について簡単に質問します。MVCを使用する場合、別のビュークラスを作成する必要はありますか?

通常、アプリケーションを実行するときに、コントローラの一部としてビューを設定し、UIButtons、UILabelsなどを追加します。基本的には、UIObjectをビューオブジェクトとしてカウントしない限り、コントローラとビューは1つになります。

初期のCS193pの例の1つでは、チュートリアルは実装前に別のオブジェクト(UIViewのサブクラス化)としてビューをコントローラから分割します。コントローラオブジェクトが従うビューのプロトコルとデリゲートプロパティ

私は、CS193pデザインの実用性について興味があるだけで、ビューを分割するとMVC設計パラダイム(特に教授援助)はよりよく表現されますが、実際のアプリケーションではそのアプリケーションに少し懐疑的であることを理解できます。

答えて

4

「ビュー」については、UIButtonやUIImageViewなどのオブジェクトと考えてください。他のアプリケーションについて何も知らない再利用可能なコンポーネントビュー・コントローラは、ビュー・オブジェクトを構成し、その状態を管理するオブジェクトです。

ほとんどの場合、カスタム描画を行う必要がある場合は、drawRect:にUIViewのサブクラス化が必要になることがあります。 UIViewをサブクラス化してビヘイビアをカスタマイズすることはできません。これは、ビューコントローラの目的です。たとえば、UITableViewをサブクラス化せず、テーブルビューを独自のデリゲートにするだけです。代わりに、ビューコントローラをテーブルビューのデリゲートにします。

+0

本当にありがとう、私が参照していた例は実際に実装しました - (void)drawRect:(CGRect)rectは、UIViewサブクラスを使う理由をもっとよく考えています。再びありがとう、私は気づいていなかった。 – fuzzygoat

1

厳密には必要ではありません。 Interface Builderを使用している場合、カスタムビューを作成する理由(ビジネスコードからUI設定コードを外す)の多くの理由が考慮されます。しかし、あなたのビューにカスタムアクションを構築したい場合や、IBではあまり得られないプロパティをいくつか設定する場合は、ビューを別のクラスに分割するのが理にかなっています。

+0

よろしくお願いいたします。ありがとうございます。 – fuzzygoat

2

iOSの場合、UIViewクラスは描画コントローラのクラスではなく、描画のリフレッシュとタッチハンドラを実装します。 drawRect:またはtouchesBegan:などが必要な場合は、別のUIViewサブクラスが必要です。

これはボタンとラベル自体が同じように動作するためです。彼らは自分自身を再描画し、処理された作業を委任します。 View Controllerはコンテンツを描画せず、xyの位置を追跡しません。

+0

- (void)drawRect:(CGRect)rectに関して、UIViewサブクラスの必要性について説明していただき、ありがとうございます。 – fuzzygoat

関連する問題