监控键盘弹起与收回的应用

像微信聊天的时候下面会有一个输入框,点击然后键盘把输入框顶起,取消第一响应,键盘收起输入框会回到原来位置。那么我们怎么更简单的操作呢?

我一般的做法是监控键盘的frame变化 然后判断键盘是弹出还是收起,进行输入框位置变化的操作。不多说直接上关键代码

第一步:注册通知,监听键盘frame的变化

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrameNotification:) name:UIKeyboardWillChangeFrameNotification object:nil];

第二步:实现监听到键盘frame变化的方法

- (void)keyboardWillChangeFrameNotification:(NSNotification *)notification{
    // 键盘的frame
    CGRect keyboardRect =         [notification.userInfo[UIKeyboardFrameEndUserInfoKey]  CGRectValue]; 
    // 键盘变化的动画时间
    CGFloat keyboardAnimationDuration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
    // 距离坐标点的目标y值
    CGFloat keyboardY = CGRectGetMinY(keyboardRect);
    [UIView animateWithDuration:keyboardAnimationDuration
                      delay:0
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^{
                     if (keyboardY==SCREENHEIGHT) {
                         // 键盘目标y值是屏幕的高 说明是收起

                           设置操作view的y值 为初始y值

                     }else{
                           // 键盘弹出 
                           操作view的之前的y值 减去键盘的高度,就是要达到的y值,此处可以有多种计算方式。


                     }
                 } completion:^(BOOL finished) {
                 }];

}

第三步:注意不要忘记移除键盘的监听 防止有时会出现混乱的问题。

 [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];

猜你喜欢

转载自blog.csdn.net/frankkay/article/details/79087064