iOS键盘遮挡文本框的解决方案

在开发过程中我们经常会遇到虚拟键盘遮挡输入框的问题,本人也上网查了一些资料,发现有些兄弟给的解决方案是这样的,他不去管我当前的光标位置只是去把键盘上面的整个UIView向上推了键盘高度,这种方式虽然解决了虚拟键盘遮挡输入框的问题但是对用户不够友好,下面我介绍一种方法来解决该问题:

首先我们要定义一个 UITextField 类型的控件用来存储当前光标所在的 UITextField ,之后我们要监听两个键盘相关的通知  keyboardDidShow 和 keyboardWillBeHidden,直接上代码:

- (void)keyboardDidShow:(NSNotification *)notification {
    NSDictionary *info = [notification userInfo];
    CGRect kbRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
    kbRect = [self.view convertRect:kbRect fromView:nil];

    UIEdgeInsets contentInsets = contentView.contentInset;
    contentInsets.bottom = kbRect.size.height;
    //    UIEdgeInsetsMake(0.0, 0.0, kbRect.size.height, 0.0);
    contentView.contentInset = contentInsets;
    contentInsets = contentView.scrollIndicatorInsets;
    contentInsets.bottom = kbRect.size.height;
    contentView.scrollIndicatorInsets = contentInsets;

    CGRect aRect = self.view.frame;
    //    CGRect aRect = tableView.frame;
    aRect.size.height -= kbRect.size.height;
    if (!CGRectContainsPoint(aRect, _activeField.frame.origin)) {
        [contentView scrollRectToVisible:_activeField.frame animated:YES];
    } else {
        NSLog(@"not Contains");
    }
}
上面的代码用来检测键盘是否需要移动和需要移动的距离,其中的 _ activeField 就是我们用来存放光标所属的UItextField,存放的代码应该在 UITextField 的 beginediting的代理中实现的。。

- (void)keyboardWillBeHidden:(NSNotification *)notification {
    UIEdgeInsets contentInsets = contentView.contentInset;
    contentInsets.bottom = 0;
    //    UIEdgeInsetsMake(0.0, 0.0, kbRect.size.height, 0.0);
    contentView.contentInset = contentInsets;
    contentInsets = contentView.scrollIndicatorInsets;
    contentInsets.bottom = 0;
    contentView.scrollIndicatorInsets = contentInsets;

    //    UIEdgeInsets contentInsets = UIEdgeInsetsZero;
    //    scrollView.contentInset = contentInsets;
    //    scrollView.scrollIndicatorInsets = contentInsets;
    [_activeField resignFirstResponder];
}

上述代码实现了退出第一响应者,并让虚拟键盘归位。。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值