2012-03-15 3 views
0

私はメモ帳のように見える、再利用可能な一般的なビューを作成しようとしています。私が問題に近づけることを決めたのは(とUIViewからなるカスタムビューを作成することです)このカスタムビューを作成するにはどのような設計アプローチをとるべきですか?

ユーザーがテキストの行をスクロールすると、UIViewがスクロール方向を追跡します。 ここのキーはです。私のカスタムビュー内では、別のサブビューのイベントに応答して1つのサブビューの位置を変更する必要があります。これらの変更を調整する必要があります...

私が考えたアプローチの1つは、MVCデザインパターンを使用することでした。ビューコントローラはすべてのイベントを処理し、それに応じてサブビューを移動することができます。このMVCは他のMVCに埋め込むことができます。

通常、MVCデザインパターンを使用する場合、コントローラはユーザーイベントを処理し、モデルとビューを操作します。しかし、私のカスタムビューはモデルを持っていません - 私がしようとしているのは、ユーザーがスクロールのようなことをしたときにビューがそれ自身のサブビューを管理することです。 MVCデザインパターンは、二つの理由のために、ここで良いフィットではないように私には思える:

  1. それがで使われているプログラムに固有のモデルやロジックはありません
  2. それはそうです。ビューがどのように表示されるかを変更するユーザーイベントを処理する責任がビューにあります。

...私は間違っている可能性があります。そのため、私は助けを求めています。私よりも経験が豊富で、これまで何度もこのことをしてきた人にとっては、次のような質問があります:

どのようなデザインパターンがこの状況に適していますか? MVCまたは...

+0

既成のビューを購入することができます。ここには有料の実装が1つあります:[DTNotePadViewController](http://www.cocoanetics.com/parts/dtnotepadviewcontroller/)。 – JoePasq

+0

うん...それは私がやろうとしていることです。私は、この人が作成したカスタムのメモ帳ビューの設計にどのようにアプローチするかを学ぶことにもっと興味があります。メモを保存する限り、私はそれのためのビューコントローラを作成するだろうが、私はカスタムの並べ替えのノートのビューを設計し、それの動作を定義することで失われています。 –

+0

彼のブログにはいくつかのメモがあると思います。彼が何を秘密にしていたのかわからない。 – JoePasq

答えて

1

ビューで独自のサブビューを管理したいのですか?それから!そのパターンにTLAがないとどうなりますか?

典型的なアプローチは、コンテナビューにlayoutSubviewsを実装することです。現在の状態やウィンドウ内の他のビューの状態(スクロールビューのcontentOffsetなど)を確認してから、サブビューを適切に設定します。

layoutSubviewsが頻繁に呼び出される可能性があるので、速やかに保存してください。

+0

Kurt - あなたは「コンテナビュー」という意味で何かを記述することができますか?私は何を得ているのでしょうか、何もしないで 'layoutSubviews'で追加するサブビューを管理するUIViewサブクラスを作成することをお勧めしますか?もう1つの質問:このコンテナのビューを 'UIScrollViewDelegate'にして、ユーザーがスクロールしたときにコールバックを取得できるのは無理でしょうか? ...助けてくれてありがとう - 私は基本的にこの問題の一般的なアプローチを探しているので、私は車輪を再発明していません。 –

+0

あなたは正しいアイデアを持っています。ビューを 'UIScrollViewDelegate'にする必要さえないかもしれません - ビューの' layoutSubviews'が自動的に呼び出されるようにスクロールビューが 'setNeedsLayout'を介してレイアウトを無効にする可能性があります。 (そうでなければ、必要なときに 'setNeedsLayout'を呼び出すだけで十分です)。試して見てください。 –

関連する問題