代码之家  ›  专栏  ›  技术社区  ›  RileyDev

在视图中使用uipangesturerecognizer时未调用didselectitemat

  •  -1
  • RileyDev  · 技术社区  · 6 年前

    在我的视图中,我同时使用了轻敲和平移的手势。视图有一个 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 回复  |  直到 6 年前
        1
  •  1
  •   matt    6 年前

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

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

    结果是,如果笔势在集合视图中,则背景视图的笔势识别器将不会启动,并且可以进行正常选择。