View Controllerにテーブルビューを追加した後、TVからVCにInterface BuilderのVCにコントロールを2回ドラッグしてVCがデータソースであり、テーブルビュー。なぜデータソース/デリゲートを2回宣言する必要があるのですか?
View Controllerでは、クラス定義またはView Controller拡張で同じものを指定する必要があります。
これはなぜですか?これは冗長ではないですか?
ありがとうございました。
View Controllerにテーブルビューを追加した後、TVからVCにInterface BuilderのVCにコントロールを2回ドラッグしてVCがデータソースであり、テーブルビュー。なぜデータソース/デリゲートを2回宣言する必要があるのですか?
View Controllerでは、クラス定義またはView Controller拡張で同じものを指定する必要があります。
これはなぜですか?これは冗長ではないですか?
ありがとうございました。
全くありません。あなたがしていることは、2つの異なることです。
「UITableViewDatasource
とUITableViewDelegate
プロトコルに準拠しているため、このクラスはUITableView
のように使用できます」とコンパイラに伝えています。
UITableView
「このクラスはここにあなたのdatasource
とdelegate
として使用しますか?」と伝えています。
これはもちろん冗長ではありません。
名前の違いから分かるように、「代理人」と「データソース」は異なるものです。
データソースは、テーブルビューに表示されるデータに関する質問に回答します。たとえば、各セクションにはいくつの行がありますか?いくつのセクションがありますか?テーブルビューのセルはどれくらいの期間ですか?各セクションのヘッダービューとフッタービューは何ですか?
一方、代理人は、テーブルビューの動作に関する質問に回答します。例えば、ユーザがセルを選択したときに何をすべきか?ユーザーがセルの選択を解除したときに何をすべきか?ユーザーが編集を終了したらどうしたらいいですか?
データソースとデリゲートの機能が非常に異なるため、クラスはデータソースのみで、デリゲートではなく、その逆の場合もあります。 VCをデータソースとし、VCがデリゲートだと言うと、これを2回ドラッグするのはそのためです。
しかし、VCだけでなく、データソースとデリゲートも可能です。 VCがデータソースとデリゲートとして機能することをコンパイラに伝える必要があります。あなたが書いた理由です:
class MyVC: UITableViewDelegate, UITableViewDataSource {}
あなたは、これが厄介2、できればUITableViewController
を使用していると思われる場合。