Как определить, когда нажат RPSystemBroadcastPickerView

Я использую RPSystemBroadcastPickerView начать общесистемную запись экрана из моего приложения. RPSystemBroadcastPickerView полностью автономен в запуске записи, и все, что, я думаю, имеет смысл - только пользователь может начать запись с экрана, явно нажав кнопку.

Мне нужно знать, когда RPSystemBroadcastPickerView прослушивается. Прямо сейчас пользовательский интерфейс показывает клавиатуру, которую я хочу продолжать показывать (это приложение чата). Однако форма, показывающая список широковещательных расширений для выбора одного, отображается под клавиатурой. Смотрите следующее изображение:

Это эффективно мешает пользователю начать трансляцию. Если бы я знал, когда пользователь нажал RPSystemBroadcastPickerViewЯ мог бы вручную спрятать клавиатуру в тот момент. Какие-либо предложения?

1 ответ

Я не нашел никаких обратных вызовов для этого, но вы можете создать прозрачную кнопку, добавив ее над RPSystemBroadcastPickerView. Когда пользователь нажмет на вашу кнопку, вы сможете скрыть клавиатуру, а затем передать действие в RPSystemBroadcastPickerView, используя код:

for subview in screenSharingProviderPickerView.subviews {
    if let button = subview as? UIButton {
         button.sendActions(for: UIControlEvents.allTouchEvents)
    }
}

Я нашел аналогичное решение для принятого ответа, но вам не нужно создавать прозрачную кнопку.
Я просто добавляю дополнительную пару "цель-действие" в таблицу отправки кнопки выбора, с#selector который будет запущен при нажатии кнопки.

/// picker is an instance of RPSystemBroadcastPickerView
for subviews in picker.subviews {
    if let button = subviews as? UIButton {
        button.addTarget(self, action: #selector(pickerAction), for: .touchUpInside)
    }
}

/// You can also accept _ sender: UIButton as parameter, if you need to.
@objc func pickerAction() {
    /// called when user press on RPSystemBroadcastPickerView
}

Примечание: имейте в виду, что если Apple изменит иерархию этого представления в будущем, вам, вероятно, также потребуется обновить приложение.

Другие вопросы по тегам