UITableView中的单元格重复

时间:2019-01-05 22:25:54

标签: ios swift uitableview

我在这里已经阅读了一些有关为什么会发生这种情况的解释,但是我无法找出解决方案,这可能非常容易。

我有一个UITableViewController,其中有2个部分,每个部分有20行。

我想在第二行中添加一个UISwitcher,所以我实现了以下内容:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as? SettingsCell else {
        return UITableViewCell()
    }
    switch indexPath.row {
    case 2: cell.addSwitcher()
    default: break
    }
    return cell
}

一切正常,直到我上下滚动,然后过一会儿,我将在每行中使用切换器。

是否可以在dequeueReusableCell中发布或执行清理,或者我在这里遗漏了什么?

这是我的addSwitcher()函数

public func addSwitcher() {
    accessoryView = switcher
    switcher.addTarget(self, action: #selector(switcherDidChange(switcher:)), for: .valueChanged)
    hasSwitcher = true
}

1 个答案:

答案 0 :(得分:1)

请确保这是由于单元格出队而引起的,那是当您为那个单元格设置它并滚动时,它下面的其他显示单元格从dequeueReusableCell得到了相同的单元格,因此您需要为{{ 1}}清除分配给它的所有先前视图

accessoryView

您还可以覆盖let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! SettingsCell cell.accessoryView = nil