1

非常に複雑なデータ セットを表示するために使用するカスタムUITableViewCellクラスがあります。

基本的に、セルはMatchオブジェクトを表示します。しかし、そうすることTeamsで、スコア、経過時間などの 2 つの情報が表示されます。

MVC ときれいなコードについて考えています。

オブジェクトを渡してMatch、セルにすべてを任せるべきですか? それとも、セルのさまざまな要素 (team1NameLabel、team1ScoreLabel、team2NameLabel など) を公開し、それらをすべて個別に設定することをお勧めしUITableViewControllerますか?

最初の方法はよりクリーンになりますが、クラス、クラスなどについて「知る」UITableViewControllerことに依存しています...UITableViewCellMatchTeam

2 番目の方法では、より多くの作業が行われますUITableViewControllerが、UITableViewCell表示が「ばかげた」ものになります。その後、セル内に情報を配置するだけです。表示されている情報については何も知りません。

4

3 に答える 3

1

MatchIMOは、オブジェクトをテーブルビューセルに渡す方がMVCに似ています。

インターネットで見つけた多くのコード (よく覚えていれば、Apple の例でさえも) はそれを行っていません。で呼び出されるビュー コントローラ内の configureCell メソッドを何度も確認できますtableView:cellForRowAtIndexPath:

モデルオブジェクトオブジェクトをセルに渡すことを好みます。これにより、ビューコントローラーコードが簡単になり、単体テストも簡単になります。ビューコントローラーをテストするときは、モデルオブジェクトがセルに渡されることを確認するだけです。テーブル ビューのセル テスト ラベルのテストが期待値に設定されていることを確認します。ビューがモデルを認識していると言う人もいるかもしれませんが、大きな問題は見当たりません。

于 2013-07-31T09:49:15.753 に答える
1

どちらの方法も問題ありませんが、個人的には 2 番目のオプション、つまり、@property と、必要に応じてアウトレットを公開するテーブル ビューを使用します。

ただし、本当に最初のオプションを使用したい場合は、オブジェクトをセルに渡して、いくつかのメソッドを公開するプロトコルを実装することをお勧めします。

@protocol tableViewCellProtocol

    -(NSString*)titleForCell;
    -(NSString*)descriptionForCell;

次に、オブジェクトではなく「プロトコルを渡す」ことができます。

[mytableCell renderObject:objectImplementingProtocol];

このようにして、オブジェクト自体をわずかに分離し、セルを他のオブジェクトで再利用できるように準備します。

于 2013-07-31T09:52:30.090 に答える