iOS调用becomeFirstResponder失效,键盘换不起来问题

在出现UIAlertView后,使用becomeFirstResponder无法唤起键盘,仅光标定位。原因是UIAlertView使得其他window成为keyWindow。解决方法是在键盘消失后延迟设置keyWindow,然后调用textfield的becomeFirstResponder。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

当有UIAlertViewat弹出后,想要通过becomeFirstResponder使textfield定位光标并调起键盘。

但事实是:只有光标定位,并没有唤起键盘。

原因:

UIAlertView弹窗过程中,或者自定义的window初始化过程中,抢占了系统window成为keyWindow。 

解决办法:

当键盘消失后(稍微延时一下,防止键盘还没有彻底消失),修改keyindow,之后再调用textfield的becomeFirstResponder方法。

搞定。

代码如下:

        //延时一下,等alert完全消失,再修改keywindow
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

            NSLog(@"before:\n");
            for (UIWindow *window in [[UIApplication sharedApplication] windows]) {
                NSLog(@"isKeyWindow = %d window level = %.1f frame = %@ class = %@\n",
                      window.isKeyWindow, window.windowLevel,
                      NSStringFromCGRect(window.frame), window.class.description);
                
            }
            
            //主要代码:调整keywindow
            for (UIW
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值