(自用)键盘遮挡输入框问题

看了其他人的博客,根据需求写的:

要实现的效果就是,如果键盘遮住的输入框,那么要把view上移,所以需要拿到当前输入框的位置,控制器实现UITextFiled的代理,有一个代理方法

//开始编辑
- (void)textFieldDidBeginEditing:(UITextField*)textField
{
    self.tempTextField = textField;
}

当点击输入框的时候,拿到这个输入框,变成全局变量,在通知的触发事件里面,进行比较,如果遮住了,就需要view上移一段距离(根据需求调节),当键盘需要消失的时候,还需要把view整体降下来

1.首先注册两个通知,监听键盘出现和消失

//注册通知
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

2.接着实现通知触发事件

  • 我在这里还定义了一个view的偏移量offsetY,方便键盘回收的时候,调节view的frame.
  • 有一个问题就是如果输入完之后,键盘没回收,又点击了另外一个输入框,会出现问题,所以我需要做一个判断,上一个键盘到底有没有回收,如果没有,我会先回收键盘,然后根据第二个键盘调节view
#pragma mark--通知事件
- (void)keyboardWillShow:(NSNotification*)noti
{
    //根据当前输入框调整view
    CGFloat textFieldY = kScreenHigh - self.tempTextField.frame.origin.y;
    CGFloat textFieldHeight = self.tempTextField.frame.size.height;
    
    NSDictionary* info = [noti userInfo];
    CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    //键盘高度
    CGFloat keyboardHeight = keyboardSize.height;
//    NSLog(@"输入框高度%f键盘高度%f",textFieldY - textFieldHeight,keyboardHeight);
    //在第二个键盘出来前,判断上个键盘的偏移量 ,退回去
    if (self.offsetY > 0) {
        [UIView animateWithDuration:0.5f delay:0.f usingSpringWithDamping:10.f initialSpringVelocity:1.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
            CGRect oldframe = self.view.frame;
            oldframe.origin.y += self.offsetY;
            self.view.frame = oldframe;
        } completion:nil];
        self.offsetY = 0;
    }
    //判断键盘是否挡住输入框
    if (keyboardHeight >= textFieldY) {
        // NSLog(@"输入框高度%f键盘高度%f",textFieldY - textFieldHeight,keyboardHeight);
        //偏移量 保存下来
        self.offsetY = keyboardHeight - textFieldY + textFieldHeight;
        [UIView animateWithDuration:0.5f delay:0.f usingSpringWithDamping:10.f initialSpringVelocity:1.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
            CGRect oldframe = self.view.frame;
            oldframe.origin.y -= self.offsetY;
            self.view.frame = oldframe;
        } completion:nil];
    }else{
        self.offsetY = 0;
    }
    
}
  • 还有键盘消失的
- (void)keyboardWillHide:(NSNotification*)noti
{
    [UIView animateWithDuration:0.5f delay:0.f usingSpringWithDamping:10.f initialSpringVelocity:1.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
        CGRect oldframe = self.view.frame;
        oldframe.origin.y += self.offsetY;
        self.view.frame = oldframe;
    } completion:nil];
    self.offsetY = 0;

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,470评论 4 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,021评论 25 709
  • 我有暴食症,5年。从90斤长到了120斤,18岁到23岁。以前不会想到在生命中最美好的5年中减肥竟然成了醒不来的...
    夕羽Lin阅读 9,207评论 4 16
  • 此篇文章以三节课的分析为例,链接文章结构如下:简述“借势”好处——引入最近的“势”和借势方——把“借势方”分为3类...
    紫澈阅读 3,860评论 0 0
  • 作业:记录一段真实生活中人物的语言或者是两三个人物的对话。建议大家先录音,然后逐字打出来。 菲是我的好朋友,无话不...
    电电猫阅读 1,882评论 2 1

友情链接更多精彩内容