UITableView:滑动 RowAction 取消选中的行

UITableView: swiping RowAction cancels the selected rows

我可以在已弃用的 UITableViewRowAction class 和 UISwipeActionsConfiguration class:[=10 中看到此行为=]

如果您将 allowsMultipleSelection 属性 设置为 true 并且假设您选择了 3 行:

当您开始滑动 table 中的任何行以执行 RowAction 时,先前选择的行 - 所有 3 行 - 都不会突出显示,并且 属性 indexPathsForSelectedRows 降为零。

UITableView 在 table 中滑动一行时进入编辑模式。这是你的

'deselecting' callback

您可以在进入模式时备份所选行并在退出模式时恢复:

class ViewController: UITableViewController {

    var indexPathsForSelectedRows: [IndexPath]?

    override func setEditing(_ editing: Bool, animated: Bool) {
        if editing {
            indexPathsForSelectedRows = tableView.indexPathsForSelectedRows
        } else {
            indexPathsForSelectedRows?.forEach { tableView.selectRow(at: [=10=], animated: false, scrollPosition: .none) }
        }
        super.setEditing(editing, animated: animated)
    }
}

另请注意,如果您在编辑期间 re-arrange/delete/insert 行,则需要相应地更新存储的 indexPathsForSelectedRows您恢复正确的索引路径。