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

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

相关文章推荐

UITextField —— 键盘弹出视图上移

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

视图上移与键盘弹回

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

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

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

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

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

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

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

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

弹出键盘 输入框上移

弹出键盘 输入框上移

弹出键盘后让页面上移

当我们弹出键盘的时候, 可能会出现键盘挡住 UITextField, 下面是解决方案 首先在viewDidLoad 添加两个观察者 不要忘了在dealloc里移除 ...

UITextField被弹出键盘遮挡

本人定义了一个基本的ViewController——BaseViewController。 .h文件内容如下: #import @interface BaseViewControlle...

UITextField键盘弹出遮挡的解决

整体思路:点击了输入框后,整体视图向上移动被挡住的那个距离。点击空白地方或者Return按钮后又收回到原来的位置,并且通过位移动画来实现这个过程。

iOS出现键盘的同时视图向上移动的方法讲解

本文主要说明如何实现在键盘出现的时候整个视图也跟着向上移动(主要是解决键盘会遮挡textField的现象),在键盘消失的时候视图恢复到原来的位子 首先分别说明下 UITextFieldDelegate...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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