Как правильно обновить содержимое UITableViewCell?
У меня есть TableView
чей контент клетки должны быть обновлены, когда это TableViewRowAction
извиняется Точнее хочу обновить UILabel
внутри клетки. Установка нового текста для этого ярлыка внутри действия не представляет проблемы, но при прокрутке вниз / вверх и перезагрузке ячейки, этот ярлык внутри ячейки имеет тот же текст, что и до его изменения.
Я знаю, что ячейки используются повторно, и поэтому я хочу знать, как "избежать" этого эффекта и как правильно обновлять содержимое ячеек. Я уже пытался позвонить TableView.ReloadData()
что, кажется, решает проблему, но клетки появляются в совершенно ином порядке, который выглядит не очень хорошо.
3 ответа
Самый простой подход - обновить данные, которые UITableView
рисует из (т.е. массив данных, из которого вы заполняете каждую ячейку, был обновлен, чтобы отразить ваше изменение текста), затем перезагрузите определенную ячейку UITableView
:
let indexPath = IndexPath(row: 0, section: 0)
tableView.reloadRows(at: [indexPath], with: .automatic)
Как вы сказали, ячейки таблицы используются повторно, это означает, что вы должны сохранить массив модели для всей таблицы и внести все изменения в нее, а затем перезагрузить таблицу, что более важно, чтобы установить содержимое индекса ячейки в cellForRowAt
Чтобы достичь этого, вы должны создать массив, который действует как источник данных для ваших меток. Когда вы изменяете текст для определенной метки, вы должны обновить массив. Вы можете получить точное местоположение обновления от собственности indexPath
метода cellForRowAt
, Каждый раз, когда вы прокручиваете вверх и вниз, cellForRowAt
метод называется. Просто используйте что-то вроде
label.text = array[indexPath.row]