我已将UILongPressGestureRecognizer附加到集合视图,目的是让用户将手指放在表格中的单元格上,并询问他们是否要删除它。
我遇到的问题是我无法像使用表格单元格那样获取indexPath(使用indexPathForRowAtPoint),是否存在等价物?
如果不是,我已经考虑过将手势添加到每个单元格,但是我如何识别哪个手势(我看不到手势的“标签”),例如我可以在选择器中发送indexPath.item吗?还是其他一些方法?
答案 0 :(得分:16)
UICollectionView
上有同样的事情。根据{{3}}:
indexPathForItemAtPoint:返回项目的索引路径 集合视图中的指定点。
- (NSIndexPath *)indexPathForItemAtPoint:(CGPoint)point参数point集合视图坐标系中的一个点。回报价值 指定点处项目的索引路径,如果没有项目则为nil 在指定点被发现。
讨论此方法依赖于提供的布局信息 关联的布局对象,以确定哪个项包含 点。
可用性适用于iOS 6.0及更高版本。宣告进入 UICollectionView.h
答案 1 :(得分: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
}