UITableView: swiping RowAction cancels the selected rows

泪湿孤枕 提交于 2020-02-25 13:08:48

问题


I can see this behavior in both deprecated UITableViewRowAction class and UISwipeActionsConfiguration class:

If you have allowsMultipleSelection property set to true and, let's say, you have 3 rows selected:

When you start swiping any row in the table for a RowAction the previously selected rows -- all 3 of them -- become unhighlighted, and the property indexPathsForSelectedRows drops to nil.

  • Does this behavior make sense?
  • Is there any 'deselecting' callback (because I'm displaying the number of selected rows)
  • What are possible workarounds to persist the array of selected rows?

回答1:


UITableView enters editing mode when you swipe a row in the table. This is your

'deselecting' callback

You can backup your selected rows on entering the mode and restore on exiting:

class ViewController: UITableViewController {

    var indexPathsForSelectedRows: [IndexPath]?

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

Also note that if you re-arrange/delete/insert rows during editing, you'll need to update your stored indexPathsForSelectedRows accordingly so you restore correct index paths.



来源:https://stackoverflow.com/questions/57275337/uitableview-swiping-rowaction-cancels-the-selected-rows

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!