Как определить, когда нажат 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 изменит иерархию этого представления в будущем, вам, вероятно, также потребуется обновить приложение.