Swift 滚动tableView时无法取消选中复选标记

Swift 滚动tableView时无法取消选中复选标记,swift,uitableview,Swift,Uitableview,我正在尝试在tableViewCell中执行选中标记按钮。当用户点击复选标记按钮时,复选标记图像将隐藏/显示。我现在面临的问题是,当我滚动表格视图时,复选标记按钮的动作很奇怪,我需要双击以取消选中复选标记 当我不滚动tableView时,它工作得很好。下面是视频和代码。提前谢谢 首先,将所选状态放入devices类/结构中,而不是使用额外的数组 class Device { var isSelected = false ... 其次,不要从视图的角度思考从模型的角度思考。这意味着在

我正在尝试在tableViewCell中执行选中标记按钮。当用户点击复选标记按钮时,复选标记图像将隐藏/显示。我现在面临的问题是,当我滚动表格视图时,复选标记按钮的动作很奇怪,我需要双击以取消选中复选标记

当我不滚动tableView时,它工作得很好。下面是视频和代码。提前谢谢


首先,将所选状态放入devices类/结构中,而不是使用额外的数组

class Device {
    var isSelected = false

...
其次,不要从视图的角度思考模型的角度思考。这意味着在模型中切换
isSelected
,并重新加载行。这样做的好处是,视图只能在
cellForRow
中可靠地操作

比如说

@objc func addButtonTapped(_ sender: UIButton) {

    let indexPath = IndexPath(row: sender.tag, section: 0)
    devices[indexPath.row].isSelected.toggle()
    self.tableView.reloadRows(at: [indexPath], with: .none)
    if devices[indexPath.row].isSelected && selectedDeviceView.isHidden {
        UIView.animate(withDuration: 2.5, delay: 0.7, options: .curveEaseInOut, animations: {
            self.tableViewHeightConstraint.constant = self.tableViewHeightConstraint.constant - self.selectedDeviceViewTopConstraint.constant - self.selectedDeviceView.frame.height
            self.selectedDeviceViewTopConstraint.constant = 0
            self.selectedDeviceView.isHidden = false
        }, completion: nil)
    }
}
cellForRow
change中

cell.isSelected = scannedDevice.isSelected
cell.isSelected = scannedDevice.isSelected