Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableView:滑动行操作取消选定行_Ios_Uitableview_Uikit_Uitableviewrowaction_Uiswipeactionsconfiguration - Fatal编程技术网

Ios UITableView:滑动行操作取消选定行

Ios UITableView:滑动行操作取消选定行,ios,uitableview,uikit,uitableviewrowaction,uiswipeactionsconfiguration,Ios,Uitableview,Uikit,Uitableviewrowaction,Uiswipeactionsconfiguration,我可以在不推荐的UITableViewRowAction类和UISwipeActionsConfiguration类中看到这种行为: 如果将allowsMultipleSelection属性设置为true,并且可以说,您选择了3行: 当您开始为RowAction滑动表中的任何行时,先前选择的行(全部3行)将变为不高亮显示,并且属性IndExpathForSelectedRows将变为零 这种行为有意义吗 是否存在任何“取消选择”回调(因为我正在显示所选行数) 保留选定行的数组可能的解决方法是什

我可以在不推荐的UITableViewRowAction类和UISwipeActionsConfiguration类中看到这种行为:

如果将allowsMultipleSelection属性设置为true,并且可以说,您选择了3行:

当您开始为RowAction滑动表中的任何行时,先前选择的行(全部3行)将变为不高亮显示,并且属性IndExpathForSelectedRows将变为零

  • 这种行为有意义吗
  • 是否存在任何“取消选择”回调(因为我正在显示所选行数)
  • 保留选定行的数组可能的解决方法是什么

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

“取消选择”回调

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

类ViewController:UITableViewController{
var indexPathsForSelectedRows:[IndexPath]?
覆盖函数集编辑(uediting:Bool,动画:Bool){
如果编辑{
indexPathsForSelectedRows=tableView.indexPathsForSelectedRows
}否则{
indexPathsForSelectedRows?.forEach{tableView.selectRow(at:$0,动画:false,scrollPosition:.none)}
}
super.setEditing(编辑,动画:动画)
}
}

另外请注意,如果在编辑过程中重新排列/删除/插入行,则需要相应地更新存储的索引路径ForSelectedRows,以便恢复正确的索引路径。

我非常确定您必须将super.setEditing(editing,animated)添加到被重写的函数中,但不幸的是,也没有重写func setEditing当UITableView进入/离开编辑模式时,调用(:,:)或override var isEditing{didSet{}}:(因此此解决方案似乎不正确)是否设置了UITableView委托?方法setEditing()不是委托协议的一部分,您为什么要问?如果您将UITableViewController子类化,那么将重写setEditing(顺便说一下,调用super.setediting()可以清除tableView.indexPathsForSelectedRows)应该可以工作。否则,您可以在UITableViewDelegate中适当地实现willBeginEditingRowAt和didEndEditingRowAt。