我在这里已经阅读了一些有关为什么会发生这种情况的解释,但是我无法找出解决方案,这可能非常容易。
我有一个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
}
答案 0 :(得分:1)
请确保这是由于单元格出队而引起的,那是当您为那个单元格设置它并滚动时,它下面的其他显示单元格从dequeueReusableCell
得到了相同的单元格,因此您需要为{{ 1}}清除分配给它的所有先前视图
accessoryView
您还可以覆盖let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! SettingsCell
cell.accessoryView = nil