我探索了很多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。
我在这里错过了一些小事吗?
答案 0 :(得分:0)