在以编程方式选择后取消选择tableview中的行

时间:2018-01-24 22:54:16

标签: ios uitableview didselectrowatindexpath

我先跟踪了这个帖子:How to programmatically select a row in UITableView in Swift 1.2 (Xcode 6.4)

这对选择有帮助,但是当我点击屏幕以选择另一行时,先前(以编程方式)设置行将不会触发取消选择消息。自然选择的单元格(通过点击屏幕)确实会收到取消选择消息。

我需要以编程方式选择的行来接收取消选择消息(非编程)。

(我在UITableView子类中工作 - 所以它不是委托,它是覆盖的。)

Example Video

我的代码:

        if let selectedRow = viewModel.selectedRow {
        defaultSelectedPath = IndexPath(row: selectedRow, section: 0)
        if let defaultSelectedPath = defaultSelectedPath {
            let selectedCell = self.tableView.cellForRow(at: defaultSelectedPath)
            self.tableView.selectRow(at: defaultSelectedPath, animated: true, scrollPosition: .none)
            self.tableView(self.tableView, didSelectRowAt: defaultSelectedPath)

            selectedCell?.accessoryType = .checkmark
        }
    }

Hack Fix:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    var cell = tableView.cellForRow(at: indexPath)
    cell?.accessoryType = .checkmark

    if let defaultSelectedPath = self.defaultSelectedPath {
        if indexPath != defaultSelectedPath {
            cell = tableView.cellForRow(at: defaultSelectedPath)
            tableView.deselectRow(at: defaultSelectedPath, animated: false)
            self.tableView(self.tableView, didDeselectRowAt: defaultSelectedPath)
            cell?.accessoryType = .none
        }
        self.defaultSelectedPath = nil
    }
}

请告诉我有更好的方法。

1 个答案:

答案 0 :(得分:1)

你可以使用: -

self.clearsSelectionOnViewWillAppear = true

on viewDidLoad()