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是父视图,则Y为20个像素高度,如果当前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];
    }
}
时间: 2024-10-16 15:53:42

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

IOS-当遇到tableView整体上移时的解决方案

方案一 在使用了navigationController后,当界面进行跳转往返后,时而会出现tableView或collectionView上移的情况,通常会自动上移64个像素,那么这种情况,我们可以关闭tableView的自动适配布局. self.automaticallyAdjustsScrollViewInsets = NO;// 默认是YES 方案二: 当出现tableView整体上移时,你当然可以在 Xcode 中修改每个 View,将他们下移20个像素(状态栏高度)或者64个像素(状

iOS 监听键盘高度,输入框上升

1 //设置输入框 ---<因为输入框用了get方法,所以第一次调用输入框要用self 调用>: 2 self.textlab.frame=CGRectMake(20, 420, 250, 30); 3 _textlab.layer.borderColor=[UIColor blueColor].CGColor; 4 _textlab.layer.borderWidth= 0.5f; 5 _textlab.backgroundColor=[UIColor colorWithRed:0.830

IOS 监听键盘的通知

通知方法: /** * 当键盘改变了frame(位置和尺寸)的时候调用 */ - (void)keyboardWillChangeFrame:(NSNotification *)note { // 设置窗口的颜色 self.view.window.backgroundColor = self.tableView.backgroundColor; // 0.取出键盘动画的时间 CGFloat duration = [note.userInfo[UIKeyboardAnimationDuration

iOS 监听键盘变化

//将要显示键盘 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willShowKeyboard:) name:UIKeyboardWillShowNotification object:nil]; //将要隐藏键盘 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willHideKeyboard

iOS监听键盘事件

#pragma mark - view life cycle - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCent

iOS监听键盘高度的变化

最近做的项目中,有一个类似微博中的评论转发功能,屏幕底端有一个输入框用textView来做,当textView成为第一响应者的时候它的Y值随着键盘高度的改变而改变,保证textView紧贴着键盘,但又不会被键盘挡住. 下面是我实现的方法:(利用通知) // 键盘通知// 键盘的frame发生改变时发出的通知(位置和尺寸)// UIKeyboardWillChangeFrameNotification// UIKeyboardDidChangeFrameNotification// 键盘显示时发出

iOS 7 :代码解决ViewController的View整体上移的问题

解决iOS7视图控制器的View整体上移20个像素 当我们在使用Xcode5创建一个新的项目的时候,我们会发现之前运行在iOS6上面的App整体的视图都向上移动了20个像素点,因为 iOS 7 把整个屏幕高度(包括状态栏和导航栏)都作为了视图控制器的有效高度,于是iOS6上的控制器视图和上面的状态栏交叠在一起了. 关于这个问题,我们的解决方法: 苹果在升级到ios7的时候已经考虑到控制器视图整体上移的这个问题,于是就在iOS7 SDK中为视图控制器添加了一个新的属性edgesForExtende

iOS 7:用代码解决视图控制器的View整体上移问题

如果你准备将你的老的 iOS 6 app 迁移到 iOS 7 上,那么你必须注意了.当你的老的 app 在 iOS 7 设备上运行时,所有ViewController 的视图都整体上移了,因为 iOS 7 把整个屏幕高度(包括状态栏和导航栏)都作为了视图控制器的有效高度.于是你的视图上移了,并和上层的状态栏交叠在一起. 你当然可以在 Xcode 中修改每个 View,将他们下移20个像素(状态栏高度)或者64个像素(状态栏+导航栏高度). 但是苹果显然已经考虑到这个问题,他们在 iOS 7 SD

IOS开发-当遇到tableView整体上移时的解决方案

方案一在使用了navigationController后,当界面进行跳转往返后,时而会出现tableView上移的情况,通常会自动上移64个像素,那么这种情况,我们可以关闭tableView的自动适配布局. self.automaticallyAdjustsScrollViewInsets = NO;// 默认是YES 方案二:当出现tableView整体上移时,你当然可以在 Xcode 中修改每个 View,将他们下移20个像素(状态栏高度)或者64个像素(状态栏+导航栏高度).但是苹果显然已