Вы не можете безопасно хранить свое состояние моделей данных в ячейке табличного представления, потому что при прокрутке ячейка, вероятно, будет повторно использоваться для вновь видимых строк, следовательно, она сохранит состояние для другой строки и, следовательно, потеряет «старую» state.
Вам необходимо сохранить состояние в вашей модели; если невозможно использовать существующую модель, вы можете создать временный словарь, который отображает IndexPath
в state
. Вы можете сделать следующее:
-
Расширение вашей ячейки с помощью пользовательского обработчика обратного вызова, который вызывается при изменении статуса.
Когда вы настраиваете свою ячейку, вручите закрытие, которое будет иметь дело с этим статусом изменения
В этом закрытии обновите модель
Некоторые псевдокоды могут вам помочь:
// in your custom cell
typealias Handler: (String) -> ()
class CustomTableViewCell : UITableViewCell {
var selectionHandler:Handler?
func didSelect(...) {
selectionHandler?(lblStatus.text)
}
}
// in your view controller
// in rowForCellatIndexPath:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell {
let cell = /* dequeue */ as! CustomTableViewCell
cell.selectionHandler = { statusText in
let row = indexPath.row
attendance[row].status = statusText /* get the status from the cell */
}
return cell
}