Вызов cellForRowAtIndexPath через экземпляр - PullRequest
1 голос
/ 17 февраля 2011

Мне было интересно, возможен ли следующий сценарий.У меня есть класс UITableViewController, который содержит десять строк, отображающих некоторые данные.Теперь я хочу показать первые пять строк в одном табличном представлении и последние пять в другом.Поскольку я не хочу снова получать данные, я надеялся создать экземпляр моего исходного класса таблицы и вызвать его cellForRowAtIndexPath:(NSIndexPath*)indexPath, чтобы вернуть ячейки таблицы и добавить его в два других представления таблицы.Можно ли вызвать метод делегата через экземпляр?Если это так, как я могу создать объект NSIndexPath, указывающий на конкретную строку в любом разделе таблицы ...

Ответы [ 5 ]

1 голос
/ 18 февраля 2011

Спасибо за ответы.Я пытался вызвать cellForRowAtIndexPath:(NSIndexPath*)indexPath, но он всегда показывает следующее предупреждение

'RootViewController' may not respond to '-cellForRowAtIndexPath:'

Также приложение вылетает с сообщением

 ***Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[RootViewController cellForRowAtIndexPath:]: unrecognized selector sent to instance 0x4bad30'

Инициализировал NSIndexPath, как описал Андрей.Угадай, просто невозможно вызвать функцию.

0 голосов
/ 20 сентября 2012

Помните, что cellForRowAtIndexPath: не является методом UITableViewController.Это метод UITableView .Имея это в виду, вы бы на самом деле вызывали метод следующим образом:

UITableViewCell *cell;
cell = [yourTableView cellForRowAtIndexPath: indexPath];

При этом должна возвращаться ячейка в indexPath.

0 голосов
/ 18 февраля 2011

Не думаю, что вам нужно что-то сложное.
Все таблицы используют один и тот же источник данных.Выберите, какие элементы отображать в какой таблице, основываясь на значении тега для этого элемента таблицы.Вызовите reloadData для всех таблиц, когда что-либо изменится.

0 голосов
/ 18 февраля 2011

Я предполагаю, что использование одного и того же UITableViewCell в двух или более таблицах не будет работать.
Если вы повторно используете ячейки, то очень вероятно, что эти дублированные ячейки в конечном итоге будут обновлены другим контентом.для этого вам нужно будет клонировать эти ячейки, и в этом случае невозможно работать на уровне UITableViewCell.
Вам лучше хранить данные (отображаемые ячейками) в массиве (или другим способом хранения) иделитесь этими данными между несколькими таблицами.

Кроме того, у вас будет дополнительная возможность настраивать внешний вид этих таблиц независимо при совместном использовании одного и того же содержимого.

Чтобы ответить на последний вопрос, вы можетесоздайте NSIndexPath, чтобы указать на любую ячейку.Первый индекс - это раздел, а второй - строка в этом разделе.Например, чтобы указать на раздел 2, ячейка 5, вы можете написать что-то вроде этого:

NSIndexPath* myIndexPath = [[NSIndexPath indexPathWithIndex:2] indexPathByAddingIndex:5]; 

//Or, with another method:

NSIndexPath* myIndexPath = [NSIndexPath indexPathWithIndexes:indexes_array length:count];
0 голосов
/ 17 февраля 2011

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

Это дает преимущество в том, что для заполнения таблицы не требуется «выборка в реальном времени» - выборка данных по мере необходимости может в некоторых случаях замедлять прокрутку таблицы или может произойти заикание.

ОднакоВы также можете попытаться добавить свои ячейки табличного представления к одному или нескольким массивам, чтобы сохранить ссылки на них, пока вы впервые оцифровываете свое табличное представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...