【问题标题】:Swift Drag&Drop - Move multiple items at once within the same collectionViewSwift Drag Drop - 在同一个 collectionView 中一次移动多个项目
【发布时间】:2018-07-15 16:34:36
【问题描述】:

我目前正在尝试在我的应用中实现拖放。我看过这个:

https://developer.apple.com/videos/play/wwdc2017/223/

(还有一个可下载的项目正好展示了我要问的问题)

有一件事我不明白,那就是:

当我拖动一个项目时,我可以将它放到同一个集合视图中。但是,当我拖动多个项目时,这不再起作用。没有创建“间隙”,当我放下物品时,它们只是回到原来的位置。

这有什么我没有看到的具体原因吗?因为我很想拥有这个功能。

我的意思是,我可能可以实现实际的“移动数据”部分(这只是演示项目没有考虑的一种情况),但我认为在将鼠标悬停在项目上时无法添加这个“间隙”。

感谢您的建议:)

【问题讨论】:

    标签: ios swift drag-and-drop uicollectionview


    【解决方案1】:

    最新的 API 集目前不支持此功能(从 iOS 13 开始)。可以通过返回带有意图 .unspecified 的提案并手动绘制丢弃指示器来实现。

    tweet reply from Tyler Fox, Apple engineer

    【讨论】:

      【解决方案2】:

      我之前没有尝试过移动多个项目,但是为单个项目“创建空间”的方式是使用 collectionView.beginInteractiveMovementForItem(at: IndexPath) 及其配套函数。 https://developer.apple.com/documentation/uikit/uicollectionview/1618019-begininteractivemovementforitem

      【讨论】:

      • 这不是由“旧”系统用于collectionViews吗?在IOS 11之前引入Drag&Drop。我不确定这是否兼容(我认为 Drag&Drop 私下使用了这个。我不知道你可以在哪里调用这个方法)
      • 据我了解,拖放更多地用于在应用程序或视图之间移动内容。我在我的应用程序 FXpress 中使用它,它在 iOS 11 上运行良好。您需要使用 longPress 手势识别器,并从中调用方法,UICollectionView 提供了一个默认实现,您可以通过设置 collectionView.installsStandardGestureForInteractiveMovement = true 来使用。好处是这也适用于 iPhone。
      • 是的,但也适用于在同一视图内移动。据我了解,这是最重要的部分。问题是,我需要能够从任意视图拖动到 collectionView,反之亦然,以及在不同(和相同)的 collectionView 之间。我不能用旧系统做到这一点。 (此外,您可以在 iPhone 上启用拖放功能,默认情况下它只是为 collectionViews 禁用)。
      • 在这种情况下,我怀疑如果删除了多个项目,它们可能会被包装在一个数组中,并且可能需要在 collectionView(_:canHandle:) 中进行检查
      • 感谢您的想法,但我查看了文档,上面写着If you do not implement this method, the collection view assumes a return value of true。所以默认情况下,它应该处理多个项目
      猜你喜欢
      • 1970-01-01
      • 2018-01-24
      • 2019-12-30
      • 1970-01-01
      • 2012-07-16
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多