描述
弹出框中有自定义的键盘输入,类似于支付宝支付密码,在iOS10中,触发之后,能够正常弹出键盘,在最新的iOS11 beta版中,触发之后,键盘不弹出。
一、查看了window的层级,弹出框自己占用了一个层级
发现键盘弹出的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