未调用 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
。
我浏览了很多 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
。