如何解决Xcode tableView didSelectRowAt 无法正常工作
当我点击一行时我期望发生的事情:行中的文本立即打印,灰色背景闪烁,选中标记立即打开/关闭。
实际发生的情况:直到我单击不同的行才会打印文本,灰色背景不会闪烁,选中标记仅在我单击不同的行时更新。
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()。我想,这会解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。