UITextField —— 键盘弹出视图上移

原创 2016年05月31日 16:15:36

实现原理: 坐标系转换后计算尺寸进行调整其偏移量

1 .定义全局变量

@property (nonatomic, strong) UITextField *currentTextfield;

2 . 在viewllWillAppear中设置监听

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

3 .viewWillDisappear中设置移除监听

 [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
 [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];

4 . 实现监听方法

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    self.currentTextfield = textField;
    return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField  {
    [textField resignFirstResponder];
    return YES;
}

- (void)keyboardWillShow:(NSNotification *)notif {
    CGRect rect = [[notif.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGFloat keyBoardHeight = rect.size.heightUIWindow *currentWindow = [[UIApplication sharedApplication].delegate window];
    CGRect actuRect = [self.currentTextfield convertRect:self.currentTextfield.bounds toView:currentWindow];


    CGFloat maxY = currentWindow.frame.size.height - keyBoardHeight;
    CGFloat actuY = CGRectGetMaxY(actuRect);
    CGFloat currentOffset = self.view.transform.ty;

    CGFloat needsOffset = maxY - actuY;     // 实际需要移动的偏移量


    [UIView animateWithDuration:.35 animations:^{
        if (needsOffset < fabs(currentOffset)) {  // 偏移量负的可直接上移,如果为正就需要考虑是否超过当前最多偏移量,如果超过则需要将其还原
            self.view.transform = CGAffineTransformTranslate(self.view.transform, 0, needsOffset);
        } else {
            self.view.transform = CGAffineTransformIdentity;
        }
    }];
}

- (void)keyboardWillHide:(NSNotification *)notif {
    [UIView animateWithDuration:.35 animations:^{
        self.view.transform = CGAffineTransformIdentity;
    }];
    self.currentTextfield = nil;
}

拓展: 如果想将所有的textField都实现这个功能便可以将其写在基类控制器中,这样让其他控制器继承自这个基类便可以了。如果想实现UITextView也可以用这种方式。原理不变。

版权声明:本文为学习讨论使用,转载标注出处!

UITextView及UITextField处理键盘弹出 视图上移

#pragma -mark UITextView Delegate - (void)textViewDidEndEditing:(UITextView *)textView{ //输入框编辑完...
  • timtian008
  • timtian008
  • 2017年07月05日 23:02
  • 556

iOS开发 textField被键盘遮住的时候自动上移

一.创建工程项目和视图控制器       1、创建一个empty(空的)工程项目,新建一个UIViewController;       2、选中工程,右键-New File…选择“Coc...
  • mrSunHR
  • mrSunHR
  • 2015年06月25日 16:30
  • 3232

IOS UITableView中UITextField 弹出键盘时,界面上移

IOS 中键盘遮挡住UITextField的输入框,导致用户体验不好,一直是IOS的难点所在。 自学IOS时间不长,对于这个问题,如下是我的方法,仅供参考。 如果UITextField位于屏幕下方...
  • android_wxl
  • android_wxl
  • 2016年04月18日 11:33
  • 992

UITextField —— 键盘弹出视图上移

实现原理: 坐标系转换后计算尺寸进行调整其偏移量1 .定义全局变量@property (nonatomic, strong) UITextField *currentTextfield;2 . 在vi...
  • linfengwenyou
  • linfengwenyou
  • 2016年05月31日 16:15
  • 581

iOS开发tableView的cell里面有textField,键盘出现的时候,自动上移

首先在ios4以后,当UITableViewCell里有UITextfield,当输入时键盘遮盖了UITextField,UITableView是会自动上移,当如果要让tableView自动滚动的话,...
  • Yo_Yo_Yang
  • Yo_Yo_Yang
  • 2016年05月12日 15:23
  • 10174

iOS开发笔记(1) -- 利用弹出键盘时使视图跟随键盘上移

监听键盘事件动态改变自定义view位置
  • iOS_greenHand
  • iOS_greenHand
  • 2017年03月03日 14:08
  • 2593

iOS UITextField输入框随键盘弹出界面上移

//点击输入框界面跟随键盘上移 - (void)textFieldDidBeginEditing:(UITextField *)textField {          CGRect...
  • walkerwqp
  • walkerwqp
  • 2017年09月07日 14:48
  • 464

iOS之键盘弹出视图上移

有时候搞开发会碰到一个问题,就是当点击一个UITextField时,弹出虚拟键盘会将这个文本控件遮住。这无论从开发角度还是用户体验来说,都是不行的。 其实要解决这个问题也是很简单的,只要获取键盘没弹...
  • qq_27325349
  • qq_27325349
  • 2016年04月01日 12:40
  • 6761

iOS键盘高度,键盘弹出视图上移动

动态获取键盘的高度这里,主要用到了:键盘弹出了的时候发出UIKeyboardWillShowNotification通知。 在处理通知的函数中获取到通知携带的信息,就可以知道键盘的高度 ...
  • u012986410
  • u012986410
  • 2015年08月20日 19:51
  • 794

iOS UITextView 随键盘弹出界面上移

- (void)textViewDidBeginEditing:(UITextView *)textView {     CGRect frame = textView.frame;   ...
  • walkerwqp
  • walkerwqp
  • 2017年12月22日 16:08
  • 172
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UITextField —— 键盘弹出视图上移
举报原因:
原因补充:

(最多只允许输入30个字)