在iOS11的版本调用了becomeFirstResponder方法,但并没有弹出键盘,必须手动点击一下UITextField,才会显示键盘。
iOS11还是测试版本,为了适配iOS11的版本,下载了Xcode9。调试的时候发现,在低版本键盘调起都不影响,唯独iOS11的测试版本无法调用。
先分析下问题,程序中其它控制调用键盘没问题,出现问题的是购买密码弹框。密码弹框是自己新加了个window层,在这个图层做的UI。从这个winodw的界面中点击进入就不显示了。
说明界面本身并没有问题,是自己新加的window导致了键盘弹不出。
查了很多资料,最终发现是自己加载window层的时候并没有把这个window设为keywindow,导致它在响应链的位置有变化,所以不能成为第一响应者。
解决办法:1、在这个新window显示时,把它设为keyWindow 2、调用becomeFirstResponder方法。
UIWindow的常用方法:
- (void)makeKeyWindow;
让当前UIWindow变成keyWindow(主窗口)
- (void)makeKeyAndVisible;
让当前UIWindow变成keyWindow,并显示出来
UIWindow的获得:
[UIApplication sharedApplication].windows
获取当前应用的所有的UIWindow
[UIApplication sharedApplication].keyWindow
获取当前应用的主窗口
view.window
获得某个UIView所在的UIWindow
网友评论