Передача крана от одного вида к другому - PullRequest
0 голосов
/ 22 мая 2019

У меня есть два UIViews 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 ]

1 голос
/ 22 мая 2019

В подклассе 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 с подклассом и другое представление B с классом UIView.

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)       
    }
}
0 голосов
/ 22 мая 2019

Всякий раз, когда представление A размещается над представлением B, измените userInteractionEnabled на false для представления A, и ваш касание будет передано в представление B.

...