iOS SDK: как получить ячейку в табличном представлении, которая не видна? - PullRequest
9 голосов
/ 26 июня 2011

Как получить ячейку для indexPath, который в данный момент не отображается в таблице?(ячейка вне диапазона)

Код для получения моей ячейки:

NSString *name = [[(ELCTextfieldCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] rightTextField] text];

-cellForRowAtIndexPath... возвращает nil, поскольку ячейка с требуемым indexPath находится вне диапазона.Так как мне получить правильную ячейку, а не ноль?

Ответы [ 5 ]

17 голосов
/ 26 июня 2011

UITableView сохраняет только видимые ячейки.Если вам нужен тот, который не виден, вы должны позвонить tableView:cellForRowAtIndexPath: из UITableView dataSource.Итак, если self - это класс, то dataSource:

UITableViewCell * cell = [self tableView:table cellForRowAtIndexPath:indexPath];
4 голосов
/ 26 июня 2011

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

2 голосов
/ 26 июня 2011

UITableViewCells предназначены для повторного использования / переработки таким образом, что пользователям не нужно создавать больше ячеек, чем количество видимых. Обычно вам не нужен доступ к ячейке, которая не видна. Этого должно быть достаточно, чтобы вы получили доступ к своему источнику данных и получили / установили там соответствующие данные. Ячейки предназначены для отображения некоторого состояния источника данных. Не сам источник данных:)

Edit:

Вы сказали, что вам нужна информация (текст) из одной ячейки выше, верно? Если вы используете метод cellForRowAtIndexPath:, ячейка будет воссоздана, но вы можете не получить текст, который был в текстовом поле. Причина? потому что, вероятно, вы не сохранили это где-то еще. Если вы сохранили его, то получите доступ к нему напрямую, а не проходите через ячейку.

1 голос
/ 28 сентября 2017

В продолжение к ответу @ Рафаэля, вот (рабочее) решение swift 3 :

UITableViewCell cell = self.tableView(self.tableView, cellForRowAt: indexPath)

0 голосов
/ 26 июня 2011

Информация для заполнения вашей таблицы поступает из массива? Не могли бы вы вытащить это непосредственно из массива с индексом 0, так же как ваш cellForRowAtIndexPath предположительно получит и заполнит эту ячейку при ее отображении?

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