indexPathsForSelectedRows被reloadData破坏
2018-09-17 15:43 法子 阅读(1052) 评论(0) 编辑 收藏 举报参考文章:https://blog.csdn.net/a906335708/article/details/79300521
通过设置
tableView.allowsMultipleSelectionDuringEditing = true
或者实现协议
func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle { return UITableViewCell.EditingStyle(rawValue: UITableViewCell.EditingStyle.insert.rawValue | UITableViewCell.EditingStyle.delete.rawValue)! }
都可以由
tableView.setEditing(true, animated: true)
或者有导航栏时添加左上角的编辑按钮,通过点击编辑按钮
//返回和左边的按钮同时存在 // navigationItem.leftItemsSupplementBackButton = true navigationItem.leftBarButtonItem = editButtonItem
进入编辑模式,来实现cell的多选,并且可以通过
tableView.indexPathsForSelectedRows
来获取选中的indexPath。
但是,
tableView.reloadData()
会破坏indexPathsForSelectedRows的值,使其重新为nil。
如果tableView进入编辑期间,(不知道的情况下)触发了reloadData,就会出现indexPathsForSelectedRows的值不对的情况。
如果编辑状态下不可避免要reloadData,可以建一个数组在下面两个协议中记录选中的data
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
... } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
... }
然后,在下面协议里根据数组判断,去设置是否是选中状态,
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
... cell.setSelected(xxxxx, animated: false) }