当UITextField成为Touch ID完成块中的第一个响应者时,不显示iOS键盘(在UIRemoteKeyboardWindow内)

我最近在我的应用程序中发现了一个问题,似乎只发生在iOS 10中,当程序触发一个文本字段成为完成处理程序内的第一响应者时系统键盘不显示 – 具体来说,我从一个Touch ID的尝试。

这个问题的疯狂部分是,即使没有显示键盘,键盘通常会在iPhone上的区域仍然响应触摸input,就好像用户正在键盘上打字一样!

在对这个问题进行了大量的调查和debugging之后,我偶然发现hidden属性在调用becomeFirstResponder之后创build的私有UIRemoteKeyboardWindow上被设置为YES 。 在其他情况下,我popup键盘并输出该hidden属性的值,它被设置为NO

有没有人在iOS 10中遇到这个问题? 如果是这样,有人find了解决办法? 我尝试在窗口实例上手动设置hidden值为YES ,但是对它没有影响。 在这一点上,我几乎是在抓秸秆。

附件:
以下是UIApplication实例中窗口的输出,当文本字段成为Touch ID完成处理程序之外的第一个响应者时:
在Touch ID完成之后成为FirstFoundResponder
当它成为Touch ID处理程序中的第一个响应者时:

在Touch ID完成后成为FirstFoundResponder

第一次更新

所以我没有考虑到在主线程中becomeFirstResponder完成的第一个becomeFirstResponder ,有些人已经指出了,但不幸的是,这并没有解决问题 – 但是我做了一些额外的发现。 hidden窗口问题似乎源于在发出becomeFirstResponder动作后立即输出UIApplication实例窗口的becomeFirstResponder 。 这样做后,我在UITextField编辑callback设置断点,并继续与键盘(这是不可见的)进行交互 – 当我输出窗口的细节,似乎并没有hidden属性设置为YES (这可能会排除这个问题的原因),但我仍然有一个无形的键盘! 我开始debugging视图层次结构,下面是检查键盘窗口时的样子的截图:

调试键盘窗口#1

调试键盘窗口#2

希望你们能看到我在这里发现的钥匙是存在的,但似乎有一些白色的视线挡住了他们的视线。 事情是,我甚至没有看到我的应用程序屏幕上的白色的意见。 我只是看到通常在键盘背后的东西。

作为一个临时的解决方法,在延迟修复后调用becomeFirstResponder ,但是对hacky解决scheme不满意。

看起来像是在不同情况下发生的问题 – 即使您在取消touchId警报后手动selecttextField,键盘也可能是不可见的。