如何在UITableView中取消选择的单元格

3

通常情况下,当我点击UITableViewCell时,UITableViewCell会被选中并高亮显示。

但是,如果再次点击完全相同的UITableViewCell,则不会发生任何事情。

我希望如果我点击已选中的UITableViewCell,则取消选择UITableVIewCell。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        guard let cell = tableView.cellForRow(at: indexPath) else { return }
        if cell.isSelected == true {
            cell.isSelected = false
        }
    }

/////

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        guard let cell = tableView.cellForRow(at: indexPath) else { return }
        if cell.isSelected == false {
            cell.isSelected = true
        } else {
            cell.isSelected = false
        }
    }

两个源代码都无法正常工作。我该如何修复这个方法?

1个回答

13

最小工作示例(前7个单元格可选择):

import UIKit
import PlaygroundSupport

class MyTableViewController: UITableViewController {

    var selectedIndexPath: IndexPath? = nil

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 7
    }

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

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if selectedIndexPath == indexPath {
            // it was already selected
            selectedIndexPath = nil
            tableView.deselectRow(at: indexPath, animated: false)
        } else {
            // wasn't yet selected, so let's remember it
            selectedIndexPath = indexPath
        }
    }
}

// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyTableViewController()

2
如果您想要多选,您将需要保持一个已选择的indexPaths数组。 - Milan Nosáľ
在多选情况下,您需要添加以下代码: selectedIndexPath = nil }``` - Mor4eza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接