处理键盘通知的一些补充

来源:互联网 发布:我的世界羊毛数据值 编辑:程序博客网 时间:2024/06/05 02:13

处理键盘的时候遇见了这么一种情况,当前页面的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
原创粉丝点击