从 iOS 14 开始,UICollectionViewDiffableDataSource 有一个
reorderHandlers
属性。它在一些示例代码中进行了演示,并在 WWDC 2020 会议关于可区分数据源的进展中进行了讨论。演示者指出您必须提供 canReorder
和 didReorder
闭包才能启用该功能。
示例代码在具有列表布局配置的集合视图中使用它,并使用重新排序附件配置列表单元格。
canReorder
和 didReorder
方法按预期调用。但是,如果我从单元中删除重新排序配件,重新排序将不再起作用 - 它不会调用任何一个关闭。它在我的应用程序中也不起作用,我有一个使用组合布局的网格布局。
如何在
UICollectionViewDiffableDataSource
上启用重新排序而不需要列出单元格和重新排序配件?
我在 WWDC 2022 的虚拟实验室中与另一位工程师讨论过这一点,看来重新订购配件只是一种方便。该功能也可以更手动地实现。文档位于“此处”“交互式重新排序项目”下。我们可以使用自己的手势识别器来知道何时开始拖动,并在确定要移动哪个项目后调用 beginInteractiveMovement
。
canReorderItem
必须返回 true 才能起作用。
YMMV。玩得开心!