zoukankan      html  css  js  c++  java
  • iOS-监听键盘输入,视图总体上移或恢复-避免输入遮挡

    1.初始化输入框,监听输入框開始编辑和结束编辑

    //password输入框
        UITextField *loginInputPasswordStr = [UITextField inputTextWithImage:[UIImage imageNamed:@"Password"] placeholderText:NSLocalizedString(@"Password", nil)];
        loginInputPasswordStr.frame = RectMakeWithPercent(24/375.0, 385/667.0, 327/375.0, 48/667.0);
        //设置键盘类型
        loginInputPasswordStr.keyboardType = UIKeyboardTypeDefault;
        //设置暗文
        [loginInputPasswordStr setSecureTextEntry:YES];
    
        //监听password输入框文字開始输入
        [loginInputPasswordStr addTarget:self action:@selector(loginInputPasswordStrInputBegin) forControlEvents:UIControlEventEditingDidBegin];
    
        //监听password输入框文字结束输入
        [loginInputPasswordStr addTarget:self action:@selector(loginInputPasswordStrInputEnd) forControlEvents:UIControlEventEditingDidEnd];
    
     [self.view addSubview:loginInputPasswordStr];

    2.開始编辑时视图上移,结束编辑或点击屏幕时恢复初始位置.

    //loginInputPasswordStr监听方法
    
    -(void)loginInputPasswordStrInputBegin{
        [self moveView];
    
    }
    
    -(void)loginInputPasswordStrInputEnd{
        [self resumeView];
    }
    
    // 点击屏幕取消输入,恢复视图初始位置
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
        [self.view endEditing:YES];
        [self resumeView];
    }

    3.主体方法!

    #pragma mark - 点击输入框视图总体上移/恢复
    //恢复原始视图位置
    -(void)resumeView
    {
        NSLog(@"恢复原始视图位置之前self.view.origin.y :%f",self.view.origin.y);
        //当视图上移130像素时->
        if (self.view.frame.origin.y == -130) {
            NSTimeInterval animationDuration=0.40f;
            [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
            [UIView setAnimationDuration:animationDuration];
            //假设当前View是父视图,则Y20个像素高度,假设当前View为其它View的子视图,则动态调节Y的高度
            float fX = self.view.frame.origin.x;
            float fY = self.view.frame.origin.y + 130;
            float width = self.view.frame.size.width;
            float height = self.view.frame.size.height;
            //下移130个单位。按实际情况设置
            self.view.frame = CGRectMake(fX, fY, width, height);
            [UIView commitAnimations];
        }
    }
    
    // 移动窗体
    -(void) moveView
    {
        NSLog(@"移动窗体之前self.view.origin.y :%f",self.view.origin.y);
        //仅仅有当视图在初始位置的时候->
        if (self.view.origin.y == 0) {
            NSTimeInterval animationDuration=0.40f;
            [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
            [UIView setAnimationDuration:animationDuration];
            float fX = self.view.frame.origin.x;
            float fY = self.view.frame.origin.y - 130;
            float width = self.view.frame.size.width;
            float height = self.view.frame.size.height;
            //上移130个单位
            self.view.frame = CGRectMake(fX, fY, width, height);
            [UIView commitAnimations];
        }
    }
  • 相关阅读:
    Spring Boot源码分析-配置文件加载原理
    Spring Boot源码分析-启动过程
    Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理
    JVM(九):垃圾回收算法
    JVM(八):Java 对象模型
    JVM(七):JVM内存结构
    JVM(六):探究类加载过程-下
    JVM(五):探究类加载过程-上
    JVM(四):深入分析Java字节码-下
    JVM(三):深入分析Java字节码-上
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7388279.html
Copyright © 2011-2022 走看看