Мое приложение использует UIAccessoryView
для обеспечения дополнительных функциональных возможностей клавиатуры (например, вкладок вперед / назад и клавиш со стрелками) для виртуальной клавиатуры, но это вызывает срабатывание UIKeyboardDidShowNotification даже при наличии физической клавиатуры (аксессуар появляется на нижняя часть экрана).
Я хотел бы проверить, подключена ли физическая клавиатура при обработке UIKeyboardWillShowNotification, чтобы предотвратить появление вспомогательного представления и предотвратить прокрутку моего пользовательского представления (чтобы освободить место для несуществующей виртуальной клавиатуры).
Я пытался изучить клавишу UIKeyboardFrameEndUserInfoKey
, но она возвращает реальный размер для виртуальной клавиатуры, несмотря на то, что ничего не отображается.
Есть ли способ обнаружить наличие физической клавиатуры, чтобы предотвратить это нежелательное поведение?
Хм, сюжет утолщается.
Я попытался отключить вспомогательное устройство ввода, вернув nil из свойства inputAccessoryView объекта Responder, который запускает клавиатуру. Это подавляет UIKeyboardWillShowNotification
и UIKeyboardDidShowNotification
, когда присутствует физическая клавиатура, но сохраняет эти уведомления, когда такой клавиатуры нет. Пока все хорошо.
Затем я попытался повторно включить inputAccessoryView только после получения UIKeyboardWillShowNotification
. Он срабатывает только тогда, когда требуется виртуальная клавиатура, поэтому он должен позволить мне вновь представить вспомогательный вид в этих обстоятельствах. Или так я думал.
К сожалению, похоже, что ОС не проверяет inputAccessoryView после UIKeyboardWillShowNotification
, поэтому она не отображает вспомогательный вид, когда это необходимо: o (
Это оставляет мне два варианта:
- Включите вспомогательное представление ввода, предоставляя дополнительные функциональные возможности пользователям виртуальной клавиатуры, но теряя способность обнаруживать физическую клавиатуру и, следовательно, не поддерживая физические устройства; или
- Исключите вспомогательное устройство ввода вообще, предотвращая доступ большинства клавиш к дополнительным клавишам, но позволяя приложению работать с физической клавиатурой.
Не лучший выбор, поэтому я по-прежнему заинтересован, чтобы кто-нибудь еще решил эту проблему!