【问题标题】:didSelectItemAt not called when using UIPanGestureRecognizer in View在视图中使用 UIPanGestureRecognizer 时未调用 didSelectItemAt
【发布时间】:2018-05-28 23:47:06
【问题描述】:

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

我尝试了以下方法,但没有运气。

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

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

有人知道问题可能是什么吗?

【问题讨论】:

  • 你期待什么?您不要将手势识别器与 UICollectionView 或 UITableView 一起使用。

标签: ios swift uicollectionview uipangesturerecognizer


【解决方案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
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2021-10-10
    相关资源
    最近更新 更多