我有两个UIView A和B。这两个视图都放在另一个视图上。假设视图A放置在视图B上方。因此,当我点击视图A时,它正在消耗所有点击操作。但是我不希望仅在视图A之前消耗该操作。我想在被点击的视图B上执行操作。
我的所有视图都有userInteractionEnabled = true
class PassthroughView : UIView {
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?
{
let view = super.hitTest(point, with: event)
return view == self ? nil : view
}
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
print("Tap Called")
return false
}
}
看到一些解决方案后,我尝试了这些代码,但似乎没有用。
视图A也具有滑动手势才能工作。
_V_i_e_w_B___
| ____
| |View A
| |
| |
| |
| |
|__|__
|_____
答案 0 :(得分:1)
在UIView子类中,仅覆盖hitTest方法
class PassthroughView : UIView {
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?
{
let view = super.hitTest(point, with: event)
return view == self ? nil : view
}
}
并使用子类创建视图A,并使用UIView类创建另一个视图B。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let b = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
b.backgroundColor = .gray
b.center = view.center
view.addSubview(b)
let a = PassthroughView(frame: CGRect(x: 0, y: 0, width: 275, height: 275))
a.backgroundColor = .lightGray
a.center = view.center
view.addSubview(a)
}
}
答案 1 :(得分:0)
每当将视图A置于视图B上方时,将视图A的userInteractionEnabled更改为false,您的点击将被传递到视图B。