检测用户从UICollectionView拖出项目?

我有一个UICollectionView ,我希望能够将项目从视图中拖出来,然后删除它们。 (非常类似Dock在Dock OS上的工作方式:将东西拖动,然后松开,然后将其移除)。

我已经做了一些研究,但是我发现几乎所有的东西都在寻找可以拖放来重新sorting的 CollectionView。 我不需要重新sorting(我很高兴从源数组中删除给定索引处的项目,然后重新加载),我只需要检测项目何时移出视图并发布。

所以我想我的问题是这样的:

1)这是可能的内置CollectionView,某种itemWasDraggedOutsideViewFromIndex:方法或东西?

2)如果不是,是否可以用子类来完成(特别是CollectionView初学者可能)?

3)是否有任何代码示例或教程可以推荐这样做?

这里有一个帮助类,我一直在做的就是:执行: https : //github.com/Ice3SteveFortune/i3-dragndrop ,希望它有帮助。 有一些如何在TestApp中使用它的例子。

UPDATE

大约一年之后,这是一个全面的拖放式框架。 希望这certificate有用: https : //github.com/ice3-software/between-kit

  1. 没有像你所build议的内置方法。 你想成为可以做的,但你必须通过一个手势识别器和适当的代码来处理拖放操作。

  2. 我试图使用一个子类来做到这一点,最后回到把它放在我的视图控制器。 不过,就我而言,我正在拖放collections视图中的内容以及屏幕上的其他两个视图。

  3. 我不知道你是否有这本书,但是我发现的最有用的东西是Erica Sadun的核心iOS6开发者食谱,它在集合视图中具有优秀的拖放代码。 我不认为它具体解决在CV之外的拖动,但对我来说,解决scheme是将手势识别器放在公共超级视图上,并始终使用其坐标而不是子视图的坐标。

我遇到的一个问题是我想能够select单元格,同时拖动,并且没有办法(尽pipe苹果公司的文档相反)要求在收集视图上单击手势失败。 结果,我不得不使用长按手势来执行整个操作,并没有translationInView长按(有locationInView),所以需要一些额外的工作:

iOS – 手势识别器translationInView

另一件事会让你更难或更容易的是你有可能放弃的目标数量。 我有很多,在许多不同types的意见(直UIView,collectionview和scrollViews)。 我发现有必要维护一个“放置目标”列表,并在被拖动的对象被移动时testing与目标的交集。 不知何故,你必须能够确定你正在交叉的视图是否可以发生放置的地方。

如果您正在处理将某些东西拖出某个视图以将其删除的具体情况(例如将其拖到垃圾箱视图中),那么这应该不会太复杂。 你必须记住,当你做一个转换时,你的框架变得毫无意义,但是中心仍然是好的; 所以你最终将使用该中心的一切,你会正常使用的框架。

这是我在网上find的最接近的东西,这是有帮助的; 我没有最终使用这个类,但我认为在我的应用程序中实现起来太复杂了。

http://www.ancientprogramming.com/2012/04/05/drag-and-drop-between-multiple-uiviews-in-ios/

希望这有一些帮助。