我有一个启用了多选的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)使用选择状态作为指示行是否显示不同高度的细节的方式?或者有没有办法将它与“编辑模式”中的滑动行为结合使用并清除所有选择?
答案 0 :(得分:1)
最好的方法是使用NSArray存储所选单元格的indexPath,并根据保存的indexPath,您可以检查并执行您想要的任何操作。您的代码中可能发生的另一个错误是:在用户在tableview上滚动的情况下发生了什么?单元格会重用并失去选择状态吗?新细胞重复使用200高度的老细胞会有错误的高度吗?