Xcode tableView didSelectRowAt 无法正常工作
Xcode tableView didSelectRowAt not working correctly
当我点击一行时我期望发生的事情:立即打印该行的文本,灰色背景闪烁,复选标记 on/off 立即出现。
实际发生了什么:在我单击不同的行之前不会打印文本,灰色背景不会闪烁,只有在我单击不同的行时才会更新复选标记。
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)
}
我不知道为什么这没有按我预期的方式工作。我使用 print 语句来检查函数何时被调用,但我无法忘记它只是没有在我期望的时候调用。
回答
这是一个语法错误,我使用的是 didDeselectRowAt 而不是 didSelectRowAt。
我认为简单地切换模型中的状态会是一种更好的方法。向您的模型添加一个代表当前状态的标志 class。
然后在您的 didDeselectRowAt
中设置标志并使用单击的 indexPath
调用 tableView.reloadItems。
在您的 cellForRow
中加载相应的模型对象并根据您的模型 属性 设置 accessoryType
class。
您应该同时实施 didSelectRowAt
和 didDeselectRowAt
?在 didSelect
上,打开复选标记。在 didDeselect
上,将其关闭。
如果需要标志数据,最好将其存储在模型中(在您的代码中,它们存储在UI/cells中),并保持模型和单元格同步。
使用tableView的reloaddata()。我想,这会解决问题。
当我点击一行时我期望发生的事情:立即打印该行的文本,灰色背景闪烁,复选标记 on/off 立即出现。
实际发生了什么:在我单击不同的行之前不会打印文本,灰色背景不会闪烁,只有在我单击不同的行时才会更新复选标记。
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)
}
我不知道为什么这没有按我预期的方式工作。我使用 print 语句来检查函数何时被调用,但我无法忘记它只是没有在我期望的时候调用。
回答
这是一个语法错误,我使用的是 didDeselectRowAt 而不是 didSelectRowAt。
我认为简单地切换模型中的状态会是一种更好的方法。向您的模型添加一个代表当前状态的标志 class。
然后在您的 didDeselectRowAt
中设置标志并使用单击的 indexPath
调用 tableView.reloadItems。
在您的 cellForRow
中加载相应的模型对象并根据您的模型 属性 设置 accessoryType
class。
您应该同时实施 didSelectRowAt
和 didDeselectRowAt
?在 didSelect
上,打开复选标记。在 didDeselect
上,将其关闭。
如果需要标志数据,最好将其存储在模型中(在您的代码中,它们存储在UI/cells中),并保持模型和单元格同步。
使用tableView的reloaddata()。我想,这会解决问题。