解决键盘遮挡输入框问题

来源:互联网 发布:qq防沉迷解除软件 编辑:程序博客网 时间:2024/05/16 19:19

- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    //创键10个输入框

    for (int i=0; i<10; i++)

    {

        UITextField *field = [[UITextFieldalloc]initWithFrame:CGRectMake(20,20+i*60,200, 50)];

        field.borderStyle =UITextBorderStyleRoundedRect;

        field.placeholder = [NSStringstringWithFormat:@"%d个输入框",i];

        //设置输入框代理

        field.delegate =self;

        [self.viewaddSubview:field];

    }

    

    //如果输入框被挡住,那么将self.view上移

    

    //先要获取到键盘的frame,才能得知输入框是否被挡住

    //通过添加观察者,来拿到键盘的frame

    

    //监听键盘抬起事件.

    //UIKeyboardWillShowNotification 系统封装的事件

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(KeyboardWillShow:)name:UIKeyboardWillShowNotificationobject:nil];

    

    //监听键盘掉下的事件

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(KeyboardWillHide:)name:UIKeyboardWillHideNotificationobject:nil];

}


- (void)KeyboardWillShow:(NSNotification *)noti

{

    //先取到第7个输入框的下边界

    //再取到键盘的上边界

    //如果输入框的下边界 -键盘的上边界  大于0,则代表遮挡

    NSLog(@"KeyboardWillShow");

    

    //1.取到输入框的上边界

    //取到通知信息

    NSDictionary *dic = noti.userInfo;

    NSLog(@"dic==%@",dic);

    //接收键盘高度信息

    NSValue *keyboardValue = [dicobjectForKey:@"UIKeyboardFrameEndUserInfoKey"];

    CGRect keyboardRect = keyboardValue.CGRectValue;

    

    //2.计算输入框与键盘的间隔

    //输入框框下边界 -键盘上边界

    NSInteger offset =_selectField.frame.origin.y +_selectField.frame.size.height - keyboardRect.origin.y;

    

    //大于0代表遮挡

    if (offset >0)

    {

        //self.view上移offset个高度

        self.view.frame =CGRectMake(0, -offset,self.view.frame.size.width,self.view.frame.size.height);

    }

}

- (void)KeyboardWillHide:(NSNotification *)noti

{

    NSLog(@"KeyboardWillHide");

    //键盘消失,self.view还原位置

    self.view.frame =self.view.bounds;

}

#pragma mark - UITextFieldDelegate

- (void)textFieldDidBeginEditing:(UITextField *)textField

{

    //开始编辑的时候,记下选择输入框

    //这样才能拿到当前输入框的frame

    _selectField = textField;

}

- (BOOL)textFieldShouldReturn:(UITextField *)textField

{

    //让键盘掉下,触发KeyboardWillHide回调

    [textField resignFirstResponder];

    returnYES;

}

0 0
原创粉丝点击