UITableView 多选和滑动操作

Posted

技术标签:

【中文标题】UITableView 多选和滑动操作【英文标题】:UITableView multi selection and swipe actions 【发布时间】:2016-06-10 00:22:33 【问题描述】:

我有一个启用了多选的 UITableView。我一直在使用“选择”来实际更改行的高度,在“选择”时显示额外的细节。例如

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    self.tableView.beginUpdates()
    self.tableView.endUpdates()


func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) 
    self.tableView.beginUpdates()
    self.tableView.endUpdates()


func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
    return (self.tableView.indexPathsForSelectedRows?.contains(indexPath) ?? false) ? 200 : 92

这似乎工作得很好。直到我开始做任何滑动动作。当我添加一些滑动动作时,滑动动作似乎清除了我所有的选择。我实际上想取消选择我正在滑动的那个,所以它会缩小。但是清除我所有的选择似乎不会触发任何正常的委托回调。即使我将 allowsMultipleSelectionDuringEditing 设置为 true。

有没有办法做到这一点?我应该跳过(ab)使用选择状态来指示该行是否显示具有不同高度的细节吗?或者有没有办法将它与在“编辑模式”下完成的滑动行为结合使用并清除我的所有选择?

【问题讨论】:

如果您想要一些信用@sticker,请回答。我最终大部分都是这样做的,而且效果很好。底线是,不要滥用选择状态。 按照你的建议移动:) 【参考方案1】:

最好的方法是使用 NSArray 来存储所选单元格的 indexPath,并基于保存的 indexPath,您可以检查并做任何您想做的事情。您的代码中可能发生的另一个错误是:如果用户在 tableview 上滚动,会发生什么?单元格会重用并丢失选择状态吗?新cell重用200高的老cell会不会有错误的高度?

【讨论】:

以上是关于UITableView 多选和滑动操作的主要内容,如果未能解决你的问题,请参考以下文章

Android实现选择题答题(包括单选多选和答题卡)

多选框的全选和全不选(复制)

单选和多选

Select2 多选和允许标签的默认值

ListView多选和单选模式重新整理

vue2 图片选择组件,支持多选和拖放