7

我已将 UILongPressGestureRecognizer 附加到集合视图,目的是让用户将手指放在表格中的单元格上,并询问他们是否要删除它。

我遇到的问题是我无法像使用表格单元格(使用 indexPathForRowAtPoint)那样获得 indexPath,是否有等价的?

如果没有,我考虑过将手势添加到每个单元格,但是我如何识别哪个手势(我看不到手势的“标签”),例如我可以在选择器中发送 indexPath.item 吗?还是别的什么方法?

4

2 回答 2

17

你得到了同样的东西UICollectionView。根据文档

indexPathForItemAtPoint:返回项目在集合视图中指定点的索引路径。

  • (NSIndexPath *)indexPathForItemAtPoint:(CGPoint)point 参数 point 集合视图坐标系中的一个点。返回值 指定点的项目的索引路径,如果在指定点没有找到项目,则返回 nil。

讨论 该方法依赖于相关布局对象提供的布局信息来确定哪个项目包含该点。

可用性 适用于 iOS 6.0 及更高版本。在 UICollectionView.h 中声明

于 2013-07-17T10:49:48.397 回答
3

请注意,您有时获得的 CGPoint 来自 UIViewController 参考系统,只要不涉及滚动,它就可以工作。当涉及滚动时,您需要通过添加滚动的偏移量将点转换为可滚动视图中的实际点。

在此示例中,CGPoint 来自整个 UIViewController 中的 3DTouch,其中包含 UICollectionView

public func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?{
    let offsetPoint = self.musicCollectionVw.contentOffset
    let realLocation = CGPoint(x: location.x + offsetPoint.x, y: location.y + offsetPoint.y)
    if let indexPath = self.musicCollectionVw.indexPathForItem(at: realLocation){
        NSLog("Section: \(indexPath.section) Row: \(indexPath.row)")
    }
    return nil
}
于 2016-10-12T15:40:08.143 回答