iOS 键盘遮挡问题

来源:互联网 发布:淘宝发货地址自动填写 编辑:程序博客网 时间:2024/05/17 04:01

原理:
监听每个uitextfiled,动态计算view的位置,在输入完成之后,将view重新设置到原始位置。
步骤:
1.添加监听事件
监听事件可以使用uitextfiled的delegate,或者使用NSNotificationCenter。

        /*         点击空白区域收起键盘         */        self.userInteractionEnabled = YES;        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(fingerTapped:)];        [self addGestureRecognizer:singleTap];        // 监听键盘的即将显示事件. UIKeyboardWillShowNotification        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];        // 监听键盘即将消失的事件. UIKeyboardWillHideNotification        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

2.监听每个textefiled,动态计算view的位置

///键盘显示事件- (void) keyboardWillShow:(NSNotification *)notification {    //获取键盘高度,在不同设备上,以及中英文下是不同的    CGFloat kbHeight = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;    //计算出键盘顶端到inputTextView panel底端的距离(加上自定义的缓冲距离INTERVAL_KEYBOARD)    CGFloat offset=0;    if (textfiledtag==3) {        offset= (textdes.frame.origin.y+textdes.frame.size.height+60) - (self.frame.size.height - kbHeight-150);    }    if (textfiledtag==4) {     offset= (textdbz.frame.origin.y+textdbz.frame.size.height+60) - (self.frame.size.height - kbHeight-190);    }    // 取得键盘的动画时间,这样可以在视图上移的时候更连贯    double duration = [[notification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];    //将视图上移计算好的偏移    if(offset > 0) {        [UIView animateWithDuration:duration animations:^{            self.frame = CGRectMake(0.0f, -offset, self.frame.size.width, self.frame.size.height);        }];    }}///键盘消失事件- (void) keyboardWillHide:(NSNotification *)notify {    // 键盘动画时间    double duration = [[notify.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];    //视图下沉恢复原状    [UIView animateWithDuration:duration animations:^{        self.frame = CGRectMake(0, 80, self.frame.size.width, self.frame.size.height);    }];}
0 0
原创粉丝点击