2017-06-14 96 views
0

我探讨了许多SO帖子的答案,但我无法得到它的工作。UIGestureRecognizer未被调用

我有一个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

创建'UIGestureRecognizer'但在处理程序中使用'UITapGestureRecognizer'。是通过设计还是只是一个错误? –

回答

0

您想使用UITapGestureRecognizer,它继承自UIGestureRecognizer

Obligatory link to the documentation for it.

+0

谢谢,就是这样。为自己学习:“如果不能在网上找到解决方案,这个问题在你自己的代码中是一个愚蠢的愚蠢的错误!” – Bonton255