iOS-监听键盘输入,视图整体上移或恢复-避免输入遮挡

Posted 极客学伟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS-监听键盘输入,视图整体上移或恢复-避免输入遮挡相关的知识,希望对你有一定的参考价值。

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

//密码输入框
    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];

    //监听密码输入框文字开始输入
    [loginInputPasswordStr addTarget:self action:@selector(loginInputPasswordStrInputBegin) forControlEvents:UIControlEventEditingDidBegin];

    //监听密码输入框文字结束输入
    [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];
    }
}

以上是关于iOS-监听键盘输入,视图整体上移或恢复-避免输入遮挡的主要内容,如果未能解决你的问题,请参考以下文章

解决IQKeyboard键盘引起的视图上移

弹出键盘,输入框上移问题 iOS

[Cordova/Phonegap] Cordova iOS 应用在第三方输入法的键盘弹出(点击输入框)时,页面不上移,导致输入框被键盘遮挡 的解决办法

ios --键盘监听JYKeyBoardListener

【iOS】解决键盘收起时页面上移的问题

swift 点击Textfield 后自动上移,避免键盘被遮住