UIbutton не отвечает на сенсорные события - PullRequest
0 голосов
/ 28 июня 2019

Моя иерархия представлений выглядит примерно так:

UIView -> UIStackView
             -> UIView
                -> PlayerView
             -> UIView
                -> UIStackView
                   UITextField (title)
                   UIButton (close)
                   UIButton (settings) etc...

Моя проблема заключается в следующем ... Когда экран загружается, если я нажимаю на кнопки закрытия или настройки, он работает.

проблема в том, что если я сначала щелкну в представлении проигрывателя для воспроизведения видео, то остановлю видео, и когда я нажимаю на любую из кнопок UIB, она не работает.Кнопка активна, но сенсорное событие не срабатывает.Вы можете увидеть реализацию плеера здесь: пример github playerview

Странная вещь ... если я нажму на UITextField (Title), то я снова смогу нажать на UIButtons,и сенсорные события запускаются.

Я играл с добавлением isUserInteractionEnabled = true в UIView, где у меня есть кнопки, но это не сработало.

вот скриншот UIдерево отладки

Инспектор объектов вида игрока

Иерархия вида игрока

1 Ответ

0 голосов
/ 28 июня 2019

Реагирует ли элемент управления на событие (например, касание), зависит от того, является ли он первым респондентом .
Если событие является касанием, элемент пользовательского интерфейса, в котором произошло касание,становится первым респондентом.Это относится, например, к UIButton.
Поскольку ваши кнопки работают до тех пор, пока вы не воспроизводили видео, это означает, что они активированы для взаимодействия с пользователем, и назначено целевое действие.
Когда вы играете и останавливаетесьвидео, и только UITextField, но никакая кнопка не может стать первым респондентом, это означает для меня, что только UITextField - это представление, которое можно коснуться, но не UIButtons.Таким образом, UIButtons должен быть закрыт другим представлением, которое не реагирует на нажатие.
Чтобы проверить это, я предлагаю остановить приложение на точке останова и нажать в области отладки Xcode кнопку Иерархия представления отладки.:

enter image description here

Затем вы должны увидеть, покрыты ли ваши кнопки чем-то другим.

РЕДАКТИРОВАТЬ:

Еще одна идея: возможно, по какой-то причине свойство canBecomeFirstResponder вашей кнопки не равно true (см. здесь ).Пожалуйста, проверьте это в отладчике.Если это false, вы можете добиться успеха, явно указав true.Для этого вам нужно было создать подкласс для вашей кнопки и переопределить var как

override var canBecomeFirstResponder: Bool {
  return true
}  

, см. здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...