UITableViewDropCoordinator drop(_:toRowAt:)
实际上工作,但只在非常有限的一些情况下。这里是你有什么了解:
因此,drop(_:toRowAt:)
仅在非常有限的情况下是有用的。当你发出这个命令时,如果有问题的单元由于丢弃而改变它的外观,单元必须重新加载 - 因为快照将对应于当前单元的状态drop
命令已给出,并且您不希望单元格的旧的外观在预览中动画化。
由于这个原因,drop(_:toRowAt:)
对于loadObject
没有用。 (这是占位符的用途。)仅在本地拖动时才有用,您可以从拖动项目的localObject
中立即获取数据。只有在简单的情况下,您可以将放到现有的电池上,替换为。
例子:
guard let s = item.localObject as? String else {return}
// ... update model using s ...
tableView.reloadRows(at: [ip], with: .none)
coordinator.drop(item, toRowAt: ip)
请注意,我没有不通话performBatchUpdates
。 drop(_:toRowAt:)
不适用于performBatchUpdates
,因为快照会过早。它只适用于这种非常有限的简单情况。
(在关于此主题的WWDC视频中,Apple似乎暗示drop(_:toRowAt:)
在某种程度上对应于. insertAtDestinationIndexPath
的下降意图。但这是不是真的。您不能删除您即将插入的单元格的快照,因为您尚未插入它。再次,这就是占位符的用途。)