1

これはオブジェクト指向プログラミングの質問です:

そこで、散布図を表示するUIViewクラスを作成しようとしています。現在の実装では、chartViewがデータをプロットするために必要なすべての情報を要求できるようにするデータソースプロトコルを作成しました。

現在のところ、誰かがchartViewを初期化してデータソースを与えると、chartviewはいくつかのサブビューを作成/管理します:すべてのデータポイントを表示する「dotsView」、ドットビューが追加されたスクロールビュー(スクロール可能) 、およびバックグラウンドに配置され、グリッド線などの他のグラフデータを表示する「skeletonView」。

このシステムは最初はうまく機能しましたが、ポイントの変更をアニメーション化することにしたので、アニメーションを処理するため、スクロールビュー内に配置された「dotsView」の代わりにcollectionViewを使用することを検討し始めました。私のため。ただし、collectionviewにはデリゲート、データソース、レイアウトオブジェクトなどが必要になるため、突然、chartViewはビューではなくコントローラーのように見えます。

ここに私の質問があります:たとえそれらのUIViewが全体の基本的な要件であるとしても、UIViewが他のUIViewを調整/構成できるようにするのは間違ったアプローチですか?一方では、chartViewのパブリックインターフェイスのシンプルさを維持したいと思います(ビューを初期化し、データソースを提供すれば完了です)。一方、このchartViewは実際にはビューではなく、コントローラーのようなものです。しかし、私は自分のチャートの消費者にそれをコントローラーのように考え/扱ってほしくありません。私は彼らにそれをビューとして使用してもらいたいのです。

何かご意見は?他の人の洞察を聞きたいです。

ありがとう!

4

2 に答える 2

0

あなたは私の友人自身の質問に答えました:UIViewが他のUIViewを調整/構成できるようにするのは間違ったアプローチですか?はい!。ビューは、組織の観点から、コントローラーによってキャストされる必要があります。単一ビューと複合ビューをキャストして、1つの石で2羽の鳥を殺すことができるチャートコントローラーを作成します。AjaxからコントローラーにURLをルーティングして、グラフに表示されるデータを変更できます

于 2013-03-25T02:22:14.053 に答える
0

ChartViewを作成しUICollectionView、それをサブビューとして使用し、そのサブビューのデータソースおよびデリゲートになることはまったく問題ありません。これは、の使用UICollectionViewがの実装の詳細であるためChartViewです。

Appleはでこれを行いUIPickerViewます。裏では、ピッカービューはコンポーネントごとに1つのテーブルビューを作成し、ピッカービューはそれ自体をデータソースにして各テーブルビューのデリゲートにします。UIPickerView.hに準拠していることがわかりますUITableViewDataSourceUITableViewDelegate実行時に+[NSObject conformsToProtocol:]、またはclass-dumpUIKitフレームワークを使用して準拠していることを確認できます。または、テストアプリを作成して、ビュー階層を確認することもできます。デバッガコマンドpo [[UIApp keyWindow] recursiveDescription]を使用すると、開始できます。

UIPickerView私が知っているiOSSDKの唯一のビューサブクラスは、そのサブビューのデータソースおよびデリゲートとして機能しますが、他の多くのUIKitビュークラスは独自のサブビューを作成および管理します。例:

  • UIScrollViewスクロールインジケーター用のプライベートサブビューがあります。
  • UITableViewプライベートヘッダー、フッター、セクションインデックス、および行セパレーターサブビューがあります。
  • UIButtonUILabelテキストを表示するプライベートとUIImageView画像を表示するプライベートがあります。
  • UISegmentedControlプライベートビューUILabelUIImageViewサブビューがあります。
  • UIProgressViewいくつかのプライベートUIImageViewサブビューを使用して、そのパーツを表示します。
  • UISliderいくつかのプライベートUIImageViewサブビューを使用して、そのパーツを表示します。
  • UITextFieldプライベートUIImageViewサブビューを使用します。
于 2013-03-25T02:47:13.190 に答える