Подтвердить что ты не робот

Клавиатура iOS (внутри UIRemoteKeyboardWindow) не отображается, когда UITextField становится первым ответчиком в блоке завершения ввода ID (только для iOS 10)

Недавно я обнаружил проблему в своем приложении, которая, по-видимому, возникает в iOS 10, где системная клавиатура не отображается при программном запуске текстового поля, чтобы стать первым ответчиком внутри обработчика завершения - в частности, обработчик завершения я вернитесь из попытки Touch ID.

Сумасшедшая часть этой проблемы заключается в том, что даже если клавиатура не отображается, область на iPhone, где обычно будет клавиатура, все еще реагирует на сенсорные входы, как если бы пользователь печатал на клавиатуре!

После большого количества исследований и отладки в этой проблеме я наткнулся на то, что для свойства hidden установлено значение YES на закрытом UIRemoteKeyboardWindow, которое создается после того, как becomeFirstResponder вызывается в тексте поле. В других ситуациях, когда я поднимаю клавиатуру и вывожу значение этого свойства hidden, оно устанавливается на NO.

Кто-нибудь еще сталкивается с этой проблемой в iOS 10? Если да, то кто-нибудь нашел решение? Я попытался вручную установить значение hidden в YES в экземпляре окна, но это не повлияло на него. На данный момент я довольно много ухватился за соломинку.

Приложения:
Здесь вывод окон из экземпляра UIApplication, когда текстовое поле становится первым ответчиком вне обработчика завершения Touch ID:
getFirstResponder вне завершения Touch ID
И когда он становится первым ответчиком внутри обработчика Touch ID:

getFirstResponder внутри завершения Touch ID

Первое обновление

Итак, я не рассматривал becomeFirstResponder в основном потоке до того, как некоторые из них указали, но, к сожалению, это не решило проблему, однако я сделал некоторые дополнительные открытия. Проблема с окном hidden, по-видимому, связана с выдачей деталей окон экземпляра UIApplication сразу после выдачи действия becomeFirstResponder. После этого я установил точку останова в обратном вызове UITextField и перейду к взаимодействию с клавиатурой (это невидимо) - и когда я вывожу детали окна, это не похоже, что свойство hidden всегда установить на YES (что может исключить, что это свойство задано как причина проблемы), но у меня все еще есть невидимая клавиатура! Я начал отлаживать иерархию представлений, а ниже - скриншот того, как он выглядит, когда я просматриваю окно клавиатуры:

Отладка окна клавиатуры # 1

Отладка окна клавиатуры # 2

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

4b9b3361

Ответ 1

Как временное обходное решение, вызовите becomeFirstResponder после фиксации задержки, однако, он не доволен хакерским решением.

Ответ 2

Похоже, что проблема возникает и для разных сценариев - клавиатура может быть невидимой, даже если вы выберете textField вручную после отмены предупреждения touchId.