滚动回来时,单元格不会被取消选中

时间:2017-06-29 10:16:29

标签: swift uitableview swift3

我有一个奇怪的问题。当我选择一个单元格来改变一个UIView组件的背景颜色时,我向下滚动并选择单元格将超出视图范围。我选择新的细胞 - >前一个应该被取消选择,但事实并非如此。因为当我回来时,我确实有2个选定的细胞。

var lastSelectedAtIndexPath: IndexPath?

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        switch tableView {
        case myTableView:

            if let cell = myTableView.cellForRow(at: indexPath) as? MyTableViewCell {
                cell.checkMarkBorder.backgroundColor = UIColor.darkGreyFts
                lastSelectedFuelAtIndexPath = indexPath
            }

        default:
            break
        }
    }

    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        switch tableView {
        case myTableView:

            if let cell = fuelTableView.cellForRow(at: indexPath) as? MyTableViewCell {
                cell.checkMarkBorder.backgroundColor = UIColor.white
            }

        default:
            break
        }
    }

iside cellForRowAt我有:

        let cell = myTableView.dequeueReusableCell(withIdentifier: "myCell") as! MyTableViewCell


if let lastIndexPath = lastSelectedFuelAtIndexPath {
                myTableView.deselectRow(at: lastIndexPath, animated: true)
            }

        cell.myImage.image = UIImage(named: fuelType)?.withRenderingMode(.alwaysTemplate)
        cell.myNameLabel.text = "Test"

任何想法是怎么回事? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

不要对cellForRowAt以外的单元格进行更改,请始终更改您的dataSource并在cellForRowAt中使用dataSource,然后在didSelectRowAtdidDeSelectRowAt重新加载该行。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = myTableView.dequeueReusableCell(withIdentifier: "myCell") as! MyTableViewCell
    cell.myImage.image = UIImage(named: fuelType)?.withRenderingMode(.alwaysTemplate)
    cell.myNameLabel.text = "Test"
    cell.checkMarkBorder.backgroundColor = lastSelectedFuelAtIndexPath == indexPath ? UIColor.darkGreyFts : UIColor.white
    return cell
}

现在在didSelectRowAtdidDeSelectRowAt更新lastSelectedFuelAtIndexPath重新加载该行。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if tableView == myTableView {           
        lastSelectedFuelAtIndexPath = indexPath
        myTableView.reloadRows(at: [indexPath], with: .automatic)
    }
}

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    if tableView == myTableView {
        lastSelectedFuelAtIndexPath = nil
        myTableView.reloadRows(at: [indexPath], with: .automatic)
    }
}