UITableView флажок скрыть при прокрутке
Когда я прокручиваю экран, верхние отметки исчезают. Я пробовал некоторые решения, найденные здесь, но ни одно не помогло...
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
cell.textLabel?.text = players[indexPath.row]
cell.textLabel?.textColor = UIColor.white
cell.backgroundColor = colorForIndex(index: indexPath.row)
cell.textLabel?.font = UIFont(name: "Chalkboard SE", size: 20)
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.tableView.deselectRow(at: indexPath, animated: true)
if let cell = tableView.cellForRow(at: indexPath){
if (cell.accessoryType == .none) {
cell.accessoryType = .checkmark
let player = players[indexPath.row]
playersSelecteds.append(player)
} else {
cell.accessoryType = .none
let player = players[indexPath.row]
if let position = playersSelecteds.index(of: player) {
playersSelecteds.remove(at: position)
}
}
}
}
1 ответ
У вас должна быть модель для отмеченных клеток. потому что каждый раз, когда вы прокручиваете, ячейки перезагружаются на основе вашего tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
метод. Например, добавьте такую модель:
var playersCheckmarked: [Bool] = []
Затем добавьте в viewDidLoad логическое значение для этого массива, если у массива Players есть объекты. Далее в override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
набор методов playersCheckmarked[indexPath.row] = true
или же playersCheckmarked[indexPath.row] = false
на основе выбора пользователя. И конечно в override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
метод добавить эту строку:
cell.accessoryType = playersCheckmarked[indexPath.row] == true .checkmark : .none