Изменить
В комментариях к этому ответу есть довольно длинная дискуссия, которая уточнила исходный вопрос. Я опубликую основные моменты здесь, чтобы помочь другим, у кого могут возникнуть подобные вопросы.
Это сводилось к смешению двух методов,
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
Первый метод — это метод экземпляра UITableView
, который возвращает UITableViewCell
для заданного индексного пути. Этот метод вызывается для объекта табличного представления.
Второй метод — это метод источника данных, объявленный в протоколе UITableViewDataSource
, который запрашивает UITableViewCell
для данного пути индекса.
Важное отличие состоит в том, что первый вызывается в экземпляре табличного представления любым классом, которому может потребоваться ссылка на ячейку таблицы, а второй вызывается экземпляром табличного представления. > в классе источника данных, чтобы запросить ячейку для отображения по заданному индексному пути.
Надеюсь, это поможет.
Большинство протоколов делегирования/источника данных в Cocoa/Cocoa Touch следуют этому шаблону. Это способ сказать что-то вроде «это табличное представление хочет эти данные».
Рассмотрим что-то вроде объекта текстового поля. У вас может быть интерфейс со многими объектами текстовых полей, которые все сообщают одному и тому же делегату, чтобы определить их поведение для определенных действий. Передавая себя в качестве аргумента в методе делегату, делегат знает, какое текстовое поле вызывает метод.
Я не уверен, что полностью понимаю, о чем вы спрашиваете, но именно так объекты сообщают своим делегатам/источникам данных, какой именно объект отправляет метод. В случае UITableView это менее очевидно, потому что часто существует только одно представление таблицы для каждого контроллера представления таблицы, но пример текстового поля, который я привел, должен подчеркнуть этот факт.
person
Jasarien
schedule
04.02.2010