2016-04-18 13 views
0

UIPickerViewDelegateには、データ(タイトル)を認識する必要があるメソッドが含まれているという、実際には奇妙な、または悪いデザインの決定が見つかりました。それはその全体の目的となるのでDataSourceです。これらのように:UIPickerViewデータソースxデリゲートデザイン

pickerView(_:titleForRow:forComponent:) 
pickerView(_:attributedTitleForRow:forComponent:) 
pickerView(_:viewForRow:forComponent:reusingView:) 

私はDataSourceDelegateのために異なるオブジェクトでPickerViewを実装したいです。もちろん、新しいデリゲートを作成するのは簡単です(おそらくPickerViewListenerDelegate)。しかし、リンゴがこのデザインの決定を下したので、最初に議論する価値があると思いました。

この奇妙なデザインの決定のポイントは何ですか?私はここに何かを逃していますか

答えて

0

UIPickerViewDataSourceプロトコルは、データソースの直接的な特性、すなわち、それらの各々における成分の数および行の数だけを扱う。

UIPickerViewDelegateプロトコルがプレゼンテーションに対応します。サイズ、タイトルまたはビュー、および選択変更のコールバックを提供します。

これをUITableViewDataSourceUITableViewDelegateと比較すると、奇妙なパターンがかなり異なっています。

多くの場合、delegatedataSourceの両方が、コールを基になるモデルにルーティングして必要なUI要素を構築する同じオブジェクト、つまりビューコントローラに配線されます。個人的には、dataSourceをデータモデルに配線するのはコントローラーの代理人だから、カプセル化を簡単に破ることができる奇妙な決定をすると思います。

つまり、基本的には、指定されたパターンを使用してモデルとプレゼンテーション(つまりフォーマッタ)を分離することができます。それが役に立つと思ったら、あなた次第です。

+0

テーブルビューの場合と同じように、DataSourceとDelegateと同じControllerオブジェクトを使用することがよくあります。しかし、私が見ているように、理由のために2つのプロパティがありますが、これは私のデザインが2つの異なるオブジェクトを使用する意味がありますが、 'UIPickerViewDataSource'と' UIPickerViewDelegate'という奇妙なデザインは私をそれをやって。 (私は奇妙な方法でそれらをリンクしなければならないので、 '代理人'はタイトルを知っている。 –