UIGestureRecognizer未被调用

时间:2017-06-14 20:41:45

标签: ios swift3 uigesturerecognizer

我探索了很多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。

我在这里错过了一些小事吗?

1 个答案:

答案 0 :(得分:0)

您想使用继承自UITapGestureRecognizer

UIGestureRecognizer

Obligatory link to the documentation for it.