未调用 UIGestureRecognizer

UIGestureRecognizer not invoked

我浏览了很多 SO 帖子来寻找答案,但我无法让它工作。

我有一个 UICollectionView。 UICollectionViewCell 以编程方式创建。我想在单击 UICollectionViewCell 的子视图时执行操作,而在单击 UICollectionViewCell 的其余部分时不执行操作。

下面是 UICollectionViewCell 的代码。

override init(frame: CGRect) {
    let bgImageViewTop = UIImageView()
    addSubview(bgImageViewTop)

    // constraints...

    bgImageViewTop.isUserInteractionEnabled = true
    bgImageViewTop.addGestureRecognizer(UIGestureRecognizer(target: self, action: #selector(handleClick(_:))))
}

func handleClick(_ sender:UITapGestureRecognizer) {
    print("click")
}

永远不会调用函数 handleClick。 bgImageViewTop 没有子视图。

我尝试覆盖 hitTest 来检查发生了什么,就像这样:

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    let view = super.hitTest(point, with: event)

    print("hittest \(view)")
    return view
}

点击 bgImageViewTop 会产生以下日志,这表明点击到了正确的地方

hittest Optional(<UIImageView: 0x7fc143413750; frame = (0 0; 240 160); opaque = NO; gestureRecognizers = <NSArray: 0x60800024e400>; layer = <CALayer: 0x60000003ffe0>>)

我验证了上面日志中的 UIImageView 引用是指 bgImageViewTop。

我是不是漏掉了什么小东西?

您想使用 UITapGestureRecognizer,它继承自 UIGestureRecognizer

Obligatory link to the documentation for it.