根据虚拟键盘弹出和收回控制UITextfield位置

因为iOS移动设备屏幕大小有限,不能像桌面用鼠标随意拖动,所以类似登陆页面输入时,常把输入框避开虚拟键盘,或者虚拟键盘弹出时输入框移动到可见位置。需要做的是让UItextfield设置代理,然后利用其代理方法:

//键盘收回时代理函数,这里设置登陆框归位

- (void)textFieldDidEndEditing:(UITextField *)textField{//

[UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationCurveLinear animations:^{

[loginView setFrame:CGRectMake(296, 376, 432, 300)];

} completion:nil];

}

//键盘弹出时代理函数,这里设置登陆框移动到可见区域

- (void)textFieldDidBeginEditing:(UITextField *)textField{

[UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationCurveLinear animations:^{

[loginView setFrame:CGRectMake(296, 88, 432, 300)];

} completion:nil];

}

 

//点击确定后键盘收回

-(BOOL)textFieldShouldReturn:(UITextField *)textField{

[textField resignFirstResponder];

return YES;

}

 此外,中文输入法不同于英文输入法会有选字的区域,也就是说比英文输入法键盘高
高度不一样
根据虚拟键盘弹出和收回控制UITextfield位置_第1张图片
所以要想真正让输入框适应键盘高度,应该获取键盘的动态高度然后让输入框位置匹配,添加一个监听通知然后修改位置:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

- (void)keyboardWillShow:(NSNotification *)notification

{

NSDictionary *info = [notification userInfo];

CGSize kbSize = [[info objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue].size;

//UIKeyboardCenterEndUserInfoKey

int changeBalue=715-kbSize.height;

[searchView setFrame:CGRectMake(0, changeBalue, 284, 53)];

}

但是实际上objectForKey:UIKeyboardBoundsUserInfoKey已经被弃用了,虽然目前还可以用,文档说建议用UIKeyboardFrameBeginUserInfoKey替代,使用方法以后更新









-(void)textFieldDidBeginEditing:(UITextField *)textField

{

    

    userName.hidden=YES;

    loginPass.hidden=YES;

    loginButton.hidden=YES;

    [self regNotification];

}

-(void)textFieldDidEndEditing:(UITextField *)textField

{


    userName.hidden=NO;

    loginPass.hidden=NO;

    loginButton.hidden=NO;

    [self unregNotification];


}


- (void)regNotification

{

   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];


}


- (void)unregNotification

{

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];

}


#pragma mark - notification handler


- (void)keyboardWillChangeFrame:(NSNotification *)notification

{

    NSDictionary *info = [notification userInfo];

    CGFloat duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];

    CGRect beginKeyboardRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];

    CGRect endKeyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];

    

    CGFloat yOffset = endKeyboardRect.origin.y - beginKeyboardRect.origin.y;

    

    CGRect inputFieldRect = RegName.frame;

    CGRect moreBtnRect = RegPass.frame;

    

    inputFieldRect.origin.y += yOffset+50;

    moreBtnRect.origin.y += yOffset+50;

    

    NSLog(@"%f-----%f--------%f----%f",inputFieldRect.origin.x,inputFieldRect.origin.y,inputFieldRect.size.width,inputFieldRect.size.height);

    

    [UIView animateWithDuration:duration animations:^{

        RegName.frame = inputFieldRect;

        RegPass.frame = moreBtnRect;

    }];

}


你可能感兴趣的:(根据虚拟键盘弹出和收回控制UITextfield位置)