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

Dan*_*hez 17 objective-c uitextfield becomefirstresponder ios ios10

我最近在我的应用程序中发现了一个问题,似乎只出现在iOS 10中,当以编程方式触发文本字段成为完成处理程序内的第一响应者时系统键盘不显示 - 特别是我从中获取的完成处理程序触摸ID尝试.

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

在对问题进行了大量调查和调试之后,我偶然发现了这个事实,即在文本字段上调用后创建的私有hidden属性.在我调出键盘的其他情况下,该属性的值设置为.YESUIRemoteKeyboardWindowbecomeFirstResponderhiddenNO

还有其他人在iOS 10中遇到这个问题吗?如果是这样,有人找到了解决方案吗?我尝试在窗口实例上手动设置hidden值,YES但这对它没有影响.在这一点上我非常关注稻草.

附件:
这是UIApplication当文本字段成为Touch ID完成处理程序之外的第一响应者时实例窗口的输出(密切关注UIRemoteKeyboardWindow):

在Touch ID完成之外的becomeFirstResponder

当它UITextField成为Touch ID处理程序中的第一个响应者时......

在Touch ID完成内部成为FirstFirstResponder

第一次更新

becomeFirstResponder有些人指出,我没有考虑在主线程上完成,但不幸的是,它没有解决问题 - 但是,我确实做了一些额外的发现.该hidden窗口问题似乎从输出的细节干UIApplication发出后,立即实例的窗口becomeFirstResponder作用.在这之后,我在UITextField编辑回调上设置了一个断点并继续与键盘交互(这是不可见的) - 当我输出窗口细节时,它似乎hidden没有设置属性YES(可能排除该属性被设置为问题的原因),但我仍然有一个隐形键盘!我开始调试视图层次结构,下面是我检查键盘窗口时的截图:

调试键盘窗口#1

调试键盘窗口#2

希望你们能看到我在这里发现的那些钥匙存在,但似乎有一些白色的视图阻挡了他们的视线.问题是,我甚至没有在我的应用程序屏幕上看到那些白色视图.我只是看到它出现时通常位于键盘后面的东西.

the*_*ude 16

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

  • 我刚刚提交了一个示例项目rdar:// 28469072,以便于复制,随意提交重复项;) (5认同)
  • 仍然可以在iOS 10.0.1上发布(发布) (3认同)
  • 我有同样的问题并应用此解决方法.好消息是0.1秒的延迟工作 - 比1秒好多了 (2认同)