在视图中使用 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 将能够发生。
我在视图中同时使用了点击和平移手势。该视图有一个 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 将能够发生。