将轻按动作从一个视图传递到另一个视图

时间:2019-05-22 14:27:20

标签: ios swift uiview uitapgesturerecognizer

我有两个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
|  |
|  |
|  |
|  |
|__|__
   |_____

2 个答案:

答案 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。