iOS键盘弹出与退回和文本框的完美适配

如上图所示,需要编辑用户的信息,键盘需要根据所输入的行来合理的显示键盘位置

①,文本框添加监听

 //添加监听

  [self addRegisterText:leftTitleRightText.textFieldRight];


//添加监听

- (void)addRegisterText:(DoneTextField *)textField

{

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldEdit:) name:UITextFieldTextDidBeginEditingNotification object:textField];

}

②,键盘添加监听

//监听键盘,添加监听

    [self addNotification];


- (void)addNotification

{

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

}

//键盘弹出

- (void)keyboardWillShow:(NSNotification *)notification

{

    NSDictionary *keyInfo = [notification userInfo];

   

    //获取高度

    id keyBoardValue = [keyInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];

    CGSize keyBoardSize = [keyBoardValue CGRectValue].size;

    //获取键盘弹出时间

    id keyBoardDurationValue = [keyInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];

    //如果键盘盖住文本框,则移动

    CGFloat allH = CGRectGetMaxY(self.currentOperateTextRect)+keyBoardSize.height;

    if (allH > (kScreenHeight-kNavH)) {

        CGPoint backScrollViewPoint = self.backScrollView.contentOffset;

        //相差的距离

        backScrollViewPoint.y =   allH - kScreenHeight;

        //动画效果

        [UIView animateWithDuration:[keyBoardDurationValue floatValueanimations:^{

            self.backScrollView.contentOffset = backScrollViewPoint;

        } completion:^(BOOL finished) {

            

        }];

        

    }

    

    

}

//键盘隐藏

- (void)keyboardWillHide:(NSNotification *)notification

{

    NSDictionary *keyInfo = [notification userInfo];

    //获取高度

    id keyBoardValue = [keyInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];

    CGSize keyBoardSize = [keyBoardValue CGRectValue].size;

    //获取键盘弹出时间

    id keyBoardDurationValue = [keyInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];

    

    CGPoint backScrollViewPoint = self.backScrollView.contentOffset;

    backScrollViewPoint.y = -kNavH;

    //动画效果

    [UIView animateWithDuration:[keyBoardDurationValue floatValueanimations:^{

        self.backScrollView.contentOffset = backScrollViewPoint;

    } completion:^(BOOL finished) {

        

    }];

    

}

注意:

@property (nonatomic,assign) CGRect currentOperateTextRect;

全局变量,记录激活那个文本框的frame


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值