当iPad虚拟键盘出现时,它会覆盖我视图中的一些文本字段 . 当键盘出现时,有没有办法将ViewController移动?
我的建议是将对象放在 UIScrollView 上,然后当键盘出现时,你可以使用 scrollRectToVisible: .
UIScrollView
scrollRectToVisible:
[scroller scrollRectToVisible:frame animated:YES];
我为我的一个应用程序编写了这段代码 .
它会自动检测TextField的位置并滚动baseView相应 .
- (void)textFieldDidBeginEditing:(UITextField *)textField { [self animateTextField:textField up:YES]; } - (void)textFieldDidEndEditing:(UITextField *)textField { [self animateTextField:textField up:NO]; } - (void) animateTextField: (UITextField*) textField up: (BOOL) up { CGPoint temp = [textField.superview convertPoint:textField.frame.origin toView:nil]; UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; if (orientation == UIInterfaceOrientationPortrait){ if(up) { int moveUpValue = temp.y+textField.frame.size.height; animatedDis = 264-(1024-moveUpValue-5); } } else if(orientation == UIInterfaceOrientationPortraitUpsideDown) { if(up) { int moveUpValue = 1004-temp.y+textField.frame.size.height; animatedDis = 264-(1004-moveUpValue-5); } } else if(orientation == UIInterfaceOrientationLandscapeLeft) { if(up) { int moveUpValue = temp.x+textField.frame.size.height; animatedDis = 352-(768-moveUpValue-5); } } else { if(up) { int moveUpValue = 768-temp.x+textField.frame.size.height; animatedDis = 352-(768-moveUpValue-5); } } if(animatedDis>0) { const int movementDistance = animatedDis; const float movementDuration = 0.3f; int movement = (up ? -movementDistance : movementDistance); [UIView beginAnimations: nil context: nil]; [UIView setAnimationBeginsFromCurrentState: YES]; [UIView setAnimationDuration: movementDuration]; if (orientation == UIInterfaceOrientationPortrait){ baseViewController.view.frame = CGRectOffset(baseViewController.view.frame, 0, movement); } else if(orientation == UIInterfaceOrientationPortraitUpsideDown) { baseViewController.view.frame = CGRectOffset(baseViewController.view.frame, 0, movement); } else if(orientation == UIInterfaceOrientationLandscapeLeft) { baseViewController.view.frame = CGRectOffset(baseViewController.view.frame, 0, movement); } else { baseViewController.view.frame = CGRectOffset(baseViewController.view.frame, 0, movement); } [UIView commitAnimations]; } }
当up = NO时,将ValayPatel代码"if"语句更改为 if(animatedDis>0 || !up) ,否则移位视图始终位于上一个位置 .
if(animatedDis>0 || !up)
3 回答
我的建议是将对象放在
UIScrollView
上,然后当键盘出现时,你可以使用scrollRectToVisible:
.我为我的一个应用程序编写了这段代码 .
它会自动检测TextField的位置并滚动baseView相应 .
当up = NO时,将ValayPatel代码"if"语句更改为
if(animatedDis>0 || !up)
,否则移位视图始终位于上一个位置 .