2012-06-03 1 views
1

Я следую книге программирования BigNerdRanch iOS, и я нахожусь в этой главе, посвященной UITableViewController. Однако мне было интересно, где UITableViewController узнает о своих delegate и dataSource. В настоящее время я какКак UITableViewController знает свои данныеSource и делегировать

@interface ItemsViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate>

Но нет ничего, что выглядит следующим образом:

[self.tableView setDelegate:self]

Я просто интересно, как UITableViewController узнает о его делегатом и DataSource

ответ

5

Если вы сами настраивали UITableView, вам нужно указать его делегату и источнику данных.

UITableViewController устанавливает UITableView и устанавливает свойства делегата и dataSource для себя. Когда вы подклассифицируете UITableViewController, вы получите это поведение бесплатно.

Ваш вопрос ошибочен, потому что UITableViewController не имеет источника данных и делегата, UITableView он контролирует. И UITableViewController является dataSource и делегатом, потому что он устанавливает вещи таким образом.

1

You либо установить делегат и dataSource на объект представления таблицы (в файле xib или раскадровки) через Interface Builder (внутри Xcode) или программно, через ".delegate =" ([self.tableView setDelegate: _____) и ".datasource=".

Обратите внимание, что вы устанавливаете эти вещи в виде таблицы, управляемой контроллером табличного представления (т. Е. Двумя отдельными объектами).

1

Прежде всего декларации:

@interface ItemsViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate> 

лишь указание, что ваш View Controller отвечает за предоставление DataSource и Делегирование методов. Это всего лишь подсказка (вы просто говорите, что ваше представление соответствует этим протоколам), кто-то просматривает ваш код и подсказывает Xcode, что вам нужно предоставить необходимые реализации протокола (иначе Xcode даст вам предупреждение о том, что вы haven 't реализовал методы источника данных и делегирования, и снова только для необходимых и необязательных методов).

Фактически вы устанавливаете источник данных и делегат TableView в Interface Builder. Нажмите на TableView в IB, выберите в правой панели опцию Outlets, затем щелкните на источнике данных и перетащите его на «File's Owner», чтобы установить источник данных. То же самое для делегата.

Если вы создаете таблицу в коде, вам нужно объявить источник данных и передать себя, таким образом:

tableview.datasource = self; 
tableview.delegate = self; 
Смежные вопросы