var rennersArray = […..with 36 names]
var checkersOpFalse = [Bool](repeating: false, count: 36)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = rennersArray[indexPath.section][indexPath.row]
cell.accessoryType = checkersOpFalse[indexPath.row] ? .checkmark : .none
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
if let cell = tableView.cellForRow(at: indexPath as IndexPath) {
checkersOpFalse[indexPath.row] = !(cell.accessoryType == .checkmark)
cell.accessoryType = checkersOpFalse[indexPath.row] ? .checkmark : .none
if let cell = tableView.cellForRow(at: indexPath as IndexPath) {
if cell.accessoryType == .checkmark {
code code
}
一切正常。 现在我在tableview中使用相同的代码,但现在重复检查标记。
有人如何解决这个问题?
答案 0 :(得分:1)
您应该重写didSelectRowAt
。它应该做的只是更新您的数据模型,然后重新加载该行。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
checkersOpFalse[indexPath.row] = !checkersOpFalse[indexPath.row]
tableView.reloadRows(at: [ indexPath ], with: .fade)
}
这将所有逻辑配置为cellForRowAt
中的单元格。
现在,分段数据显示错误复选标记的真正问题是由于checkersOpFalse
是一个仅基于索引路径行的数组。当你有多个部分时,这显然不起作用。
您应该在checkersOpFalse
上输入IndexPath
字典。
var checkersOpFalse = [IndexPath: Bool]()
然后更新didSelectRowAt
:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
checkersOpFalse[indexPath] = !checkersOpFalse[indexPath, default: false]
tableView.reloadRows(at: [ indexPath ], with: .fade)
}
cellForRowAt
:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = rennersArray[indexPath.section][indexPath.row]
cell.accessoryType = checkersOpFalse[indexPath, default: false] ? .checkmark : .none
return cell
}