处理键盘通知的一些补充

处理键盘的时候遇见了这么一种情况,当前页面的UITextField被遮挡,点击按钮会从底部弹出一个透明背景的输入框,这个弹窗里的UITextField也会被键盘遮挡,所以这个类里也增加了键盘通知。

这种情况的的结果就是,当弹窗里的UITextField处于焦点时,背景页面里的事件也会触发,背景页和弹窗页同时都有页面滚动的效果。

解决办法:

在UITextFieldDelegate中的textFieldShouldBeginEditing:代理方法中注册键盘通知,在监听方法里,接收到UIKeyboardDidHideNotification时,处理完自己需要视图滚动之后,在通知中心移除自己。

附上精简代码

注册键盘通知

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardObserver:) name:UIKeyboardDidShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardObserver:) name:UIKeyboardDidHideNotification object:nil];
    return YES;
}

在监听方法中接收到键盘收起的事件后移除监听
-(void)keyboardObserver:(NSNotification*)noti
{

    NSValue *value = [noti.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect keyframe = [value CGRectValue];
    
    if ([noti.name isEqualToString:UIKeyboardDidShowNotification]) {
        
        }
    }else if ([noti.name isEqualToString:UIKeyboardDidHideNotification]){
            
                //do something...
            
                [[NSNotificationCenter defaultCenter] removeObserver:self];
            
    }
}


这个解决办法的好处在于,只有当某个输入框成为焦点的时候,才会响应键盘通知,当键盘收起的时候,通知中心移除监听者。单个页面多个输入框,多个页面多个输入框(类似弹窗和背景页都会有输入框的情况)不会互相影响。

也就是是说,处理键盘事件的生命周期只有在某一个输入框成为焦点开始,到键盘收起的时间。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值