TapGesture内置collectionView

时间:2017-01-22 09:31:26

标签: ios swift uicollectionview uigesturerecognizer

我想将一个doubleTap手势或其他一些功能添加到集合视图中,该集合视图将下载附加到所选单元格的文件。

我有一个双击手势识别器工作,当您在集合视图内双击时,它将打印该点。但是,只要我尝试双击一个单元格,内置手势识别器就会生效,并且运行了选择项运行。

有没有办法在不触发didSelectItemAt中的代码的情况下添加双击?或者在没有向viewController添加按钮的情况下实现此功能的其他方法的任何想法?

这是我在具有集合视图的viewcontroller的viewDidLoad中使用的手势代码:

let doubleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didDoubleTap))
    doubleTap.numberOfTapsRequired = 2
    self.collectionView.addGestureRecognizer(doubleTap)

我的doubleTap功能:

func didDoubleTap(gesture: UITapGestureRecognizer) {

    let point: CGPoint = gesture.location(in: self.collectionView)

    print(point)

    if let selectedIndexPath: IndexPath = self.collectionView.indexPathForItem(at: point) {
        let selectedCell: UICollectionViewCell = self.collectionView.cellForItem(at: selectedIndexPath as IndexPath)!
        print("cell \(selectedCell) was double tapped")
    }
}

作为一个注释,我已经尝试将其添加到单元格本身,但我无法使其正常工作。单元格是一个自定义的UICollectionViewCell,并且没有viewDidLoad函数,因此要创建手势,我必须创建一个委托,该委托调用代码来设置来自viewController的手势,该viewController保存集合视图,我只是得到错误。 / p>

2 个答案:

答案 0 :(得分:1)

您可以在手势识别器上尝试delaysTouchesBegan = true。这应该会延迟导致didSelect的触摸处理并从手势识别器

运行您的操作

答案 1 :(得分:0)

您应该将点击手势识别器添加到cellForRowAtIndexpath数据源方法中的每个单元格。