1

例:UITableviewDelegateプロトコルにはtableView:didSelectRowAtIndexPath:. UITableViewクラスのメソッドではなく、プロトコルのデリゲート メソッドにして直接呼び出すのはなぜですか?

4

2 に答える 2

4

実際にUITableViewDataSourceは、重要な違いである not デリゲートにあります。

委任の目的は、何かに対する責任をクライアント コードに移すことです。はUITableView、作成する必要があるセルの種類を認識していません。アプリケーションは、セルがどのように見えるべきか、どのように機能するかを知っているアプリケーションです。tableViewこれが、(プロトコルによって定義された) dataSource にセルの作成を要求する理由です。

Apple フレームワークでdelegateは、通常、a はオブジェクト イベントをリッスンするためのものであり、adataSourceは何かのコンテンツを提供するために使用されます。どちらも委任パターンの形式です。

テーブルビューに質問したいので質問している場合-「そのインデックスパスのセルは何ですか?」インスタンスメソッドを使用できますcellForRowAtIndexPath

于 2013-07-10T22:08:10.723 に答える
0

のテーブル ビューのデータ ソースとして別のクラスを使用する場合があるためですUITableViewController

これは、説明するための単純でやや不自然な例です...

DataA と DataB を表示する 2 つのテーブル ビューを持つビュー コントローラーがあり、各テーブルの横にあるボタンを押すと、そのテーブルが全画面表示されている別のビューに移動できるとします。UITableViewこれを 2 つの と 2 つUIButtonの およびサブクラスである 2MyFullScreenTableViewControllerつ目のコントローラーを持つビュー コントローラーとして設定すると、2UITableViewControllerつの完全に別個のオブジェクトが作成されます。1 つは DataA テーブルのデータ ソースで、もう 1 つは DataA テーブルのデータ ソースです。 DataB テーブル。したがって、これらのオブジェクトは、最初のビューの両方のテーブルのセルを提供し、フルスクリーン コントローラーのセルも提供します。表示しているテーブルに応じて、正しいデータ ソースを渡すことができます。

于 2013-07-10T22:14:02.943 に答える