在我的项目中,我只是添加了这一行代码,以便在用户选择的单元格旁边添加一个小小的复选标记。(在did中选择行在函数中)
let currentCell = tblView.cellForRow(at: indexPath)! as UITableViewCell
currentCell.accessoryType = .checkmarkcurrentCell打印得很好。例如,当我打印出单元格时,它会给我单元格的框架;文本;clipsToBounds;自动调整大小;layer:0>。但是,当我按预期添加这一行代码时,它确实在该单元格上添加了复选标记,但也添加了从该单元格开始的其他15个单元格--看起来如下所示

有人知道为什么会发生这种事吗?我怎么才能解决这个问题?
发布于 2020-05-21 13:19:27
这不是你使用表视图的方式。
表视图单元格被重用。复选标记出现在您没有点击的单元格上,因为它实际上与您所点击的单元格相同,但是由于该单元格已被滚动出视图,它将在底部重新显示,只是使用不同的标签文本。
在didSelectRow中要做的正确事情是更新模型。现在,您可能正在使用一个事物数组作为表视图的数据源:
var listOfThings: [MyModel]!现在,您只需要以某种方式存储选择了哪些东西,哪些不在您的模型中。例如在另一个数组中:
var thingsSelectionStatuses: [Bool]!初始化如下:
thingsSelectionStatuses = Array(repeating: false, count: listOfThings.count)在didSelectRow中,更新thingsSelectionStatuses并重新加载单元格。
thingsSelectionStatuses[indexPath.row].toggle()
tableView.reloadRows(at: [indexPath], with: .automatic)重新加载单元将导致调用cellForRowAt。在cellForRowAt中,我们根据thingsSelectionStatuses设置accessoryType
cell.accessoryType = thingsSelectionStatuses[indexPath.row] ? .checkmark : .nonehttps://stackoverflow.com/questions/61935191
复制相似问题