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
的下降意圖。但這是不是真的。您不能刪除您即將插入的單元格的快照,因爲您尚未插入它。再次,這就是佔位符的用途。)