iOS итерирует UITableView - PullRequest
       13

iOS итерирует UITableView

1 голос
/ 14 февраля 2012

У меня есть UITableView, который собирает данные из базы данных.То, что я хотел бы знать, есть ли какой-нибудь способ, который я могу перебрать в коллекции UITableView и проверить значения ячейки?Причина, по которой я спрашиваю, заключается в том, что я хотел бы обновить каждую ячейку в зависимости от ее текущего значения (изменить шрифт, размер, цвет и т. Д.).Я видел в другом ТАКом посте по этой теме, но поскольку ячейки уже созданы и их значения изменены, для меня это немного сложнее.Я думал об итерации UITableView, прежде чем позвонить reloadData, но любые другие предложения приветствуются.

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

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

Изменение вашей модели и вызов reloadData, как подсказывает ваш пост, было бы правильным решением. iOS обеспечит запуск обновления с наименьшим возможным числом циклов ЦП, поэтому вам не нужно беспокоиться о уже созданных ячейках. Это также самый простой подход с точки зрения ваших усилий по написанию кода.

1 голос
/ 14 февраля 2012

Табличное представление предназначено для отображения данных.Свойства ваших ячеек таблицы должны только записываться, а не считываться.Надлежащий способ справиться с этой ситуацией - обновить базовые объекты модели - объекты, которые вы используете для заполнения табличного представления - при изменении данных, а затем перезагрузить затронутые строки.

Проблема, с которой вы столкнулисьВы увидите, что UITableView повторно использует ячейки таблицы.Как только ячейка таблицы прокручивается за пределы экрана, вполне вероятно, что табличное представление будет повторно использовать эту же ячейку для отображения другой строки.

Это означает, что принципиально невозможно перебирать ячейки таблицы.Когда вам нужно обновить строку, потому что ее данные изменились, вы должны вызвать reloadRowsAtIndexPaths:withRowAnimation: (или reloadData, если все строки изменились), и если строка видна на экране, UITableView вызоветваши методы источника данных и дают вам возможность настроить ячейку для отображения.

...