问题描述
当我点击一行时我期望发生的事情:行中的文本立即打印,灰色背景闪烁,选中标记立即打开/关闭。
实际发生的情况:直到我单击不同的行才会打印文本,灰色背景不会闪烁,选中标记仅在我单击不同的行时更新。
let itemArray = ["Find Mike","Buy Eggos","Destroy Demagorgon"]
override func tableView(_ tableView: UITableView,diddeselectRowAt indexPath: IndexPath) {
print(itemArray[indexPath.row])
if tableView.cellForRow(at: indexPath)?.accessoryType == .checkmark {
tableView.cellForRow(at: indexPath)?.accessoryType = .none
} else {
tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark
}
tableView.deselectRow(at: indexPath,animated: true)
}
我不知道为什么这不像我期望的那样工作。我使用打印语句来检查函数何时被调用,但我无法摆脱它只是在我期望的时候没有调用的事实。
答案
这是一个语法错误,我使用的是 diddeselectRowAt 而不是 didSelectRowAt。
解决方法
我认为简单地切换模型中的状态是一种更好的方法。向您的模型类添加一个表示当前状态的标志。
然后在您的 didDeselectRowAt
中设置标志并使用点击的 indexPath
调用 tableView.reloadItems。
在您的 cellForRow
中加载相应的模型对象并根据模型类的属性设置 accessoryType
。
您应该同时实现 didSelectRowAt
和 didDeselectRowAt
?在 didSelect
上,打开复选标记。在 didDeselect
将其关闭。
如果您需要标志数据,最好将其存储在模型中(在您的代码中,它们存储在 UI/单元格中),并保持模型和单元格同步。
,使用tableView的reloaddata()。我想,这会解决问题。