Swift:配件有问题

Swift: Trouble with Accessories

在我的项目中,我只是添加了这行代码,以便在用户 select 的单元格旁边添加一个小复选标记。 (在 select 行函数中)

    let currentCell = tblView.cellForRow(at: indexPath)! as UITableViewCell
    currentCell.accessoryType = .checkmark

currentCell 打印正常。例如,当我打印出单元格时,它会给我单元格的框架;文本;剪辑到边界;自动调整大小; layer:0>。当我添加这行代码时,正如预期的那样,它确实在该单元格上添加了复选标记,但也从该单元格开始每隔 15 个单元格添加了复选标记 - 它看起来像这样

有谁知道为什么会这样,我该如何解决?

这不是您使用 table 视图的方式。

Table 视图单元格被重复使用。复选标记出现在您没有点击的单元格上,因为它实际上与您 确实 点击的单元格是相同的 UITableViewCell 对象,但由于该单元格已被滚出看来,它又重新显示在底部,只是带有不同的标签文本。

didSelectRow 中正确的做法是更新您的模型。现在,您可能正在使用一个数组作为 table 视图的数据源:

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 : .none