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也可以用这种方式。原理不变。

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

相关文章推荐

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

首先在ios4以后,当UITableViewCell里有UITextfield,当输入时键盘遮盖了UITextField,UITableView是会自动上移,当如果要让tableView自动滚动的话,...

IOS 实现键盘弹出视图上移功能

这样弹出来的键盘就遮挡住了文本框,导致看不到文本框,也就看不到输入了什么 解决这个问题有两种方法 一、把文本框调高点,这样键盘就不会遮挡文本框了,但是有时候布局不允许这么做, 那么显而易...
  • donwei8
  • donwei8
  • 2015年06月09日 14:31
  • 672

ios---实现随着键盘弹出,响应的视图也随之上移

实现随着键盘弹出,响应的视图也随之上移 有时候你可能会遇到这样一个情况,如下图     这样弹出来的键盘就遮挡住了文本框,导致看不到文本框,也就看不到输入了什么 解决这个问题有...

iOS之键盘弹出视图上移

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

iOS学习笔记——视图上移与键盘弹回

在学习iOS开发的过程中总是遇见键盘出现时,遮盖了输出口UITextField,无法看到用户自己输出的内容。这时就需要对当前视图做出相应的上移,当输出结束时点击屏幕的任意地方,使键盘弹回去。 第一种...

弹出键盘后让页面上移

当我们弹出键盘的时候, 可能会出现键盘挡住 UITextField, 下面是解决方案 首先在viewDidLoad 添加两个观察者 不要忘了在dealloc里移除 ...
  • CXLiao
  • CXLiao
  • 2016年05月23日 16:06
  • 303

[Phonegap+Sencha Touch] 移动开发24 打包wp8.1的App,运行时输入框聚焦弹出软键盘之后,界面上移而不恢复原位的解决办法

这个现象只出现在phonegap打包sencha touch的wp8.1程序会出现(仅wp8.1,wp8正常),其它js框架我测试了几个(app framework, jquery mobile),好...

Android:如何设置底部控件view随着软键盘的弹出而上移

在点击文本框输入文字时,如何设置界面底部控件随着软键盘的弹出而上移……...

Android软键盘弹出,界面整体上移

在做搜索功能的时候,点击搜索框,搜索框获取焦点,键盘弹出;现在问题出来了,android软键盘弹出的时候,android整个界面上移,布局被挤压,很难看;要解决这个问题,我们需要用到 windowSo...

弹出键盘 输入框上移

弹出键盘 输入框上移
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UITextField —— 键盘弹出视图上移
举报原因:
原因补充:

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