UITableView多选和滑动操作

时间:2016-06-10 00:22:34

标签: ios uitableview

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

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)使用选择状态作为指示行是否显示不同高度的细节的方式?或者有没有办法将它与“编辑模式”中的滑动行为结合使用并清除所有选择?

1 个答案:

答案 0 :(得分:1)

最好的方法是使用NSArray存储所选单元格的indexPath,并根据保存的indexPath,您可以检查并执行您想要的任何操作。您的代码中可能发生的另一个错误是:在用户在tableview上滚动的情况下发生了什么?单元格会重用并失去选择状态吗?新细胞重复使用200高度的老细胞会有错误的高度吗?