iOS8.0+ 第三方输入法多次发送UIKeyboard相关的通知

iOS8及更高版本允许第三方输入法,但为开发者带来新挑战。文章描述了在使用第三方输入法时,UITextField在点击时会三次接收到UIKeyboardWillChangeFrameNotification通知的情况。开发者面临的问题是如何在输入框跟随键盘移动并添加遮罩的同时,避免因第三方输入法导致的异常行为。文中提出了一种通过记录键盘状态和响应键盘通知来解决该问题的方法。

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

在iOS8.0+的系统中提供了对第三方输入法的支持,这对广大的果粉来说或许是一个好消息,但对于万千的iOS应用程序开发人员来说更关心的是产品经理是否又要根据这更改需求或是第三方输入法是否会引发什么不必要的bug,毕竟以前写的程序只针对系统输入法。不巧的是这样的事情就发生在最近开发的App中——使用第三方输入法会三次接收到UIKeyboardWillChangeFrameNotification的通知(在一次点击UITextField的时候)。

具体的需求是这样的:当点击处于视图控制器底部的UITextField时想要它跟随弹出的键盘一起上升到与键盘相邻的位置,并在输入框视图的上部添加一个遮罩,点击遮罩时让输入框失去焦点。


要实现这种效果有很多种方法:在iOS5.0以前由于虚拟键盘的高度固定可以通过实现UITextField的代理方法- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField来实现:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    UIView *alphaCoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - 216 - 40)];
    [alphaCoverView setBackgroundColor:[UIColor blackColor]];
    alphaCoverView.alpha = 0;
    [UIView animateWithDuration:0.25 animations:^{
        alphaCoverView.alpha = 0.4;
    }];
    alphaCoverView.tag = 10001;
    UITapGestureRecognizer *tapToResignirstResponder = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(textFielfWillResignirstResponder)];
    [alphaCoverView addGestureRecognizer:tapToResignirstResponder];
    [[[UIApplication sharedApplication].delegate window] addSubview:alphaCoverView];
    [UIView animateWithDuration:0.3 animations:^
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值