码迷,mamicode.com
首页 > 其他好文 > 详细

键盘遮挡输入框处理

时间:2017-05-09 18:56:39      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:frame   not   通知   mic   输入框   ldd   object   select   不同的   

1.定义一个记录光标底部的成员变量cursorBottom

2.监听键盘出现和键盘消失通知(记得在dealloc方法中 移除监听器)

3.在UITextField的代理方法textFieldShouldBeginEditing:中转换当前输入框的原点坐标到scrollView中的坐标,计算光标底部坐标并保存

4.在监听键盘出现执行方法中计算 需不需要滚动及滚动大小,动画实现滚动

5.在监听键盘消失方法和点击空白处方法,关闭键盘

 

 

主要实现代码如下:

 

@interface AddAccountViewController ()<UITextFieldDelegate>

@property (nonatomic, assign) CGFloat  cursorBottom;

@end

 

@implementation AddAccountViewController

- (void)viewDidLoad {

    [super viewDidLoad];

 

    

    self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];

    self.scrollView.backgroundColor = self.view.backgroundColor;

    [self.scrollView addGestureRecognizer:[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hiddenKeyboard)]];

    [self.view addSubview:self.scrollView];

    

    //注册键盘出现的通知

    [[NSNotificationCenter defaultCenter] addObserver:self

                                             selector:@selector(keyboardWillShow:)

                                                 name:UIKeyboardWillShowNotification object:nil];

    //注册键盘消失的通知

    [[NSNotificationCenter defaultCenter] addObserver:self

                                             selector:@selector(keyboardWillHide:)

                                                 name:UIKeyboardWillHideNotification object:nil];

    

    [self setupAccountInfo];

    

}

- (void)dealloc

{

    [[NSNotificationCenter defaultCenter] removeObserver:self];

}

 

#pragma mark UITextFieldDelegate

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField

{

    CGPoint point = [textField convertPoint:CGPointMake(0, 0) toView:_scrollView];

    

   self.cursorBottom = textField.height+point.y ;

    

    return YES;

    

}

 

#pragma mark 键盘代理事件

///键盘显示事件

- (void) keyboardWillShow:(NSNotification *)notification {

    //获取键盘高度,在不同设备上,以及中英文下是不同的

    CGFloat kbHeight = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;

    

    //计算出键盘顶端到inputTextView panel底端的距离(加上自定义的缓冲距离INTERVAL_KEYBOARD)

    CGFloat offset =  self.cursorBottom + kbHeight - self.view.height;

    

    // 取得键盘的动画时间,这样可以在视图上移的时候更连贯

    double duration = [[notification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];

    

    //将视图上移计算好的偏移

    if(offset > 0) {

        [UIView animateWithDuration:duration animations:^{

            self.scrollView.contentOffset = CGPointMake(0, offset);

        }];

    }

}

 

///键盘消失事件

- (void) keyboardWillHide:(NSNotification *)notify {

    // 键盘动画时间

    double duration = [[notify.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];

    

    //视图下沉恢复原状

    [UIView animateWithDuration:duration animations:^{

        self.scrollView.contentOffset = CGPointMake(0, 0);

    }];

}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

{

    [self.view endEditing:YES];

}

- (void)hiddenKeyboard

{

    [self.view endEditing:YES];

}

@end

键盘遮挡输入框处理

标签:frame   not   通知   mic   输入框   ldd   object   select   不同的   

原文地址:http://www.cnblogs.com/yeas/p/6831992.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!