【问题标题】:UITableView multi selection and swipe actionsUITableView 多选和滑动操作
【发布时间】: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,请回答。我最终大部分都是这样做的,而且效果很好。底线是,不要滥用选择状态。
  • 按照你的建议移动:)

标签: ios uitableview


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    相关资源
    最近更新 更多