Прикосновение к кнопке не обнаруживается, когда TapGestureRecognizer присоединен к представлению контейнера. - PullRequest
0 голосов
/ 07 марта 2019

В моем приложении у меня есть view-контроллер, вид которого имеет прикрепленный распознаватель tapGesture.

TapGesture анимировал скрытый вид (какая-то панель), который становится видимым.Этот вид содержит кнопку, которая может выполнить какое-либо действие, а затем скрывает панель.

Но, похоже, из-за того, что прикосновение прикреплено к представлению view-constroller, касание кнопки не обнаружено, и только касаниена контроллере вида срабатывает.

Я пытался поиграть с firstResponder, но, похоже, не работает

func addGesture(){
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(togglePanel))
    myView.addGestureRecognizer(tapGesture)
}

моя панель вставлена ​​так:

 insertSubview(actionPanel, at: 0)

Моя кнопка

actionPanel.addSubview(dismissBtn)

Действие кнопки

dismissBtn.addTarget(self, action: #selector(hideActionPanel), for: .touchUpInside)

@objc func hideActionPanel(){
        print("tapped")
    }

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Вы можете добавить UIGestureRecognizerDelegate в ваш класс.Чтобы узнать больше, перейдите по ссылке UIGestureRecognizerDelegate .

. Затем внедрите func gestureRecognizer(UIGestureRecognizer, shouldReceive: UITouch) -> Bool.Эта функция будет вызываться каждый раз, когда должен произойти жест.Если вы хотите точно знать, как это работает, перейдите сюда gestRecognizer .

Не забудьте подключить свой жест к делегату вот так.

tapGesture.delegate = self

Наконец, внутри функции UIGestureRecognizerDelegate проверьте, равно ли сенсорное представление представлению, которое имеет gestRecognizer.Это не позволит любым базовым представлениям распознавать жест.

if touch.view == gestureRecognizer.view { return true } return false

0 голосов
/ 07 марта 2019

кнопка, которая не работает

Запустите приложение, используя xcode, используйте Xcode "Debug View Hierarchy"

эта кнопка или ее суперпредставление может быть .userInteractionEnabled = false

Я предполагаю, что ваше анимированное изображение является суперпредставлением, и изображение по умолчанию отключает взаимодействие с пользователем

добавьте это xxImage.userInteractionEnabled = true

...