首页 文章

键盘出现在iPad时如何移动视图?

提问于
浏览
0

当iPad虚拟键盘出现时,它会覆盖我视图中的一些文本字段 . 当键盘出现时,有没有办法将ViewController移动?

3 回答

  • 1

    我的建议是将对象放在 UIScrollView 上,然后当键盘出现时,你可以使用 scrollRectToVisible: .

    [scroller scrollRectToVisible:frame animated:YES];
    
  • 1

    我为我的一个应用程序编写了这段代码 .

    它会自动检测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];
        }
    }
    
  • 7

    当up = NO时,将ValayPatel代码"if"语句更改为 if(animatedDis>0 || !up) ,否则移位视图始终位于上一个位置 .

相关问题