在视图中使用 UIPanGestureRecognizer 时未调用 didSelectItemAt

didSelectItemAt not called when using UIPanGestureRecognizer in View

我在视图中同时使用了点击和平移手势。该视图有一个 UICollectionView,我试图在其中调用 didSelectItemAt,但未调用该方法。

我尝试了以下方法,但没有成功。

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

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

有人知道问题出在哪里吗?

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

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

结果是,如果手势在集合视图中,背景视图的手势识别器将不会开始,正常的 selection 将能够发生。