在View

时间:2018-05-28 23:47:06

标签: ios swift uicollectionview uipangesturerecognizer

我在视图中同时使用了水龙头和平移手势。该视图有一个UICollectionView,我试图调用didSelectItemAt,但不会调用该方法。

我试过以下,但没有运气。

override func viewDidLoad() {
   panGesture.delegate = self
   tapGesture.delegate = self
}

extension AddNotebookViewController: UIGestureRecognizerDelegate {
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
}

有人知道这个问题是什么吗?

1 个答案:

答案 0 :(得分:1)

正如您已经猜到的那样,问题是背景视图的手势识别器会吞下选择集合视图单元格的点击。要解决此问题,请在视图控制器中实现此手势识别器委托方法:

func gestureRecognizerShouldBegin(_ gr: UIGestureRecognizer) -> Bool {
    let p = gr.location(in: self.view)
    let v = self.view.hitTest(p, with: nil)
    return v == gr.view
}

结果是,如果手势在集合视图中,则背景视图的手势识别器将不会开始,并且将能够进行正常选择。