iOS11多window下键盘不显示问题

描述

弹出框中有自定义的键盘输入,类似于支付宝支付密码,在iOS10中,触发之后,能够正常弹出键盘,在最新的iOS11 beta版中,触发之后,键盘不弹出。

一、查看了window的层级,弹出框自己占用了一个层级

Xcode中查看view的层级

发现键盘弹出的window,UITextEffectsWindow下没有键盘的内容(其实这样根本看不出问题)

最后尝试用makeKey方法将当前弹出框的window设置为keywindow,随之而来出现另一个问题,因为这个弹出框可能弹出多次,而弹出框的window会建立多次,可能上一次弹出框的window变成了keywindow,弹出框显示了,但是紧接着进行了第二次弹框,将弹出框的window设置成了keywindow,但是没有进行弹出,以第一个为准,这是就会出现键盘小时的情况,需要点击一下输入框才能弹出键盘。

二、解决方法
1、保存系统主要的keywindow
fileprivate let systemKeyWindow: UIWindow? = UIApplication.shared.keyWindow
2、弹出框显示的时候将当前的window设置为keywindow
(self.targetView as? UIWindow)?.makeKey() // 将当前view的window设置为key
3、弹出框隐藏的时候将之前隐藏keywindow恢复
self.systemKeyWindow?.becomeKey() // 将主window设置为key

参考文章

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容