簡體   English   中英

將輕按動作從一個視圖傳遞到另一個視圖

[英]Passing tap action from one view to another

我有兩個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
|  |
|  |
|  |
|  |
|__|__
   |_____

在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)       
    }
}

每當將視圖A放置在視圖B上方時,將視圖A的userInteractionEnabled更改為false,您的點擊將被傳遞到視圖B。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM