问题标签 [uicollectionviewdropdelegate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
827 浏览

ios - How can I disable cell dragging between UICollectionView sections?

I have two sections in my UICollectionView. I would like to be able to drag cells within each section but not between them.

I am using a long press gesture recognizer to animate the cell drag movement so I could check that the drop location is not in a different section. Is there a way to determine a section's frame?

Or is there a simpler way?

0 投票
1 回答
1394 浏览

ios - UICollectionViewDropDelegate:在删除图标上拖动单元格

我有一个 collectionview 并将支持 iOS 11 的拖放功能。一个要求是需要通过将单元格拖到视图底部的垃圾箱上来删除它们。是否还有另一种可能性,然后使用第二个包含删除符号的集合视图?

不幸的是,UIView 不能是 UICollectionViewDropDelegate。

0 投票
2 回答
619 浏览

ios - iOS swift 4.2 如何拒绝或禁止放入 UICollectionView

我正在尝试在我的应用程序中启用拖放作为触发功能的机制。我有一个 TableView 显示用户列表,我有一个 collectionView 可以显示 3 种不同类型的数据 - 但一次只能显示一种类型。

我希望 collectionView 在显示 Type1 数据和 Type3 数据时接受来自 tableView 的“drop”,但不接受 Type2 数据。现在,我的拖放工作正常 - 但它适用于所有 3 种数据类型,我不希望它适用于 Type2 数据。

所以目前,如果它正在显示 Type2 数据,我触发的操作只是忽略丢弃的数据 - 但我想阻止 CollectionView 甚至接受它(如果可能的话)。我不希望用户看到可能下降的视觉指示。

我怀疑我应该为此使用 dropProposal - 但是在阅读了 Apple 文档并使用 Google 和 YouTube 搜索了多个小时的示例之后 - 我完全不知所措。

我知道我应该在这里发布我的问题代码,但我什至想尝试控制它的唯一一件事就是根据我显示的数据类型来操作 collectionView.dropDelegate。我相当有信心正确的解决方案会非常不同 - 但这是我尝试过的:

如果你能帮我指出答案,请做。

0 投票
0 回答
514 浏览

uicollectionview - UICollectionView 在调整单元格大小时拖放

我想用 来实现拖放功能UICollectionViewDragDelegateUICollectionViewDropDelegate它工作得很好,但我需要收缩下面的单元格,同时用拖动行为提升一个单元格,并在用户将单元格放回单元格时收缩回原始大小。但不知何故,我无法使用下面的代码获得稳定的结果。动画很奇怪,并且在尝试拖动屏幕边缘的单元格时行为不可预测。我怎样才能使结果更可预测?

0 投票
1 回答
83 浏览

ios - 嵌入 PageViewController 时的 CollectionView 拖放

当使用嵌入在 UIPageViewController 中的 UICollectionView 进行拖放didExit时,分页时委托会立即触发。

  1. 开始拖放手势
  2. 页面到新视图
  3. CollectionDropDelegate 立即触发:
  • newCV.didEnter
  • oldCV.didExit
  • newCV.didExit

newCV.didUpdate永远不会被调用。如果我们在这一点上放开下降,它就会取消。我的 PageViewController 不是全屏的,所以如果我将拖动移出并移回,我仍然可以在分页后执行拖放,但这是一个糟糕的用户体验。

笔记:

  • 不使用 UICollectionViewController
  • CollectionView 被添加到 UIViewController 层次结构中viewDidLoad

有任何想法吗?

0 投票
0 回答
27 浏览

ios - 如何使用异步数据源和单元格注册在 UICollectionView 拖放中实现拖放操作?

我有一个UICollectionView绑定到一个UICollectionViewDiffableDataSource,我正在生成快照并将其应用到后台串行队列上的数据源,并使用UICollectionViewCellRegistration. 我正在努力支持通过拖放对集合视图的内容进行重新排序,但我在做什么时遇到了麻烦,collectionView:performDropWithCoordinator:因此重新排序动画看起来是正确的。

通常,我会做这样的事情:

但是因为我的数据源更新发生在后台队列上,所以我至少必须异步进行快照生成和应用程序,并且我也想在那里进行实际的数据模型修改以避免挂起。而且我需要在这个方法中调用主队列dropItem上的协调器。这会导致一个奇怪的动画,其中放置的项目暂时消失(当被调用时)然后重新出现(当数据源在后台队列上更新时)。drop

到目前为止,我最好的想法是使用UICollectionViewDropPlaceholder在集合视图中保留该位置,直到数据源更新。但是要创建一个占位符,我需要一个单元重用标识符(有关 init 方法的文档),而我没有其中一个,因为我正在使用单元注册创建我的单元。

所以我的问题是:我该怎么做performDrop才能使它正常工作?如果占位符是正确的想法,我该如何在这种情况下使用它?

0 投票
1 回答
23 浏览

swift - 使用 UITableViewDropCoordinator 通过具有可区分数据源的 dropDelegate 动画滴

在 iOS 11 中,Apple 向 TableViews 引入了原生拖放功能,它为常见的拖放交互提供了特定的动画。假设您返回了正确的 UIDropProposal 它会很容易地在表格视图中为重新排序的放置设置动画

这将很好地动画将放置的项目插入 tableView 到它悬停的间隙中。

快进到 iOS 13+ 和 diffable 数据源的使用,我在 Apple 文档中找不到使用带有快照的 dropCoordinator 的参考,并且没有更新指南、教程或 WWDC 视频来展示如何组合两组 API。

拖放控制器将在拖动操作期间正确“管理” tableView 并移动单元格以显示拖动单元格将下降的间隙,但它不会使用coordinator.drop(dragItem, toRowAt: destinationIndexPath).

我目前的解决方法是手动更新然后应用快照:

这在一定程度上有效,但它没有与放置控制器动画集成。因此,当我拖动时,我可以获得在 tableView 中提供放置间隙的动画,但是一旦我放下它,单元格就会从其原始 indexPath 移动而不是从动画放置的项目移动(正如我所期望的这种解决方法),这是都相当笨重。

dropCoordinator 可以使 tableView 为拖动设置动画,这表明它也应该能够为 drop 设置动画,但我找不到实现这一点的方法。

任何这方面的经验都将不胜感激(在我放弃并将代码恢复为旧的 UITableViewDataSource 方法之前)。