在键盘上显示所有界面方向的文本字段?

时间:2011-08-16 09:27:39

标签: iphone

实际上在我的iPhone应用程序中,我使用以下代码抬起视图以显示键盘上方的文本字段。我的应用程序支持所有四种界面方向。我使用以下代码来提升视图。这里的问题是它只适用于纵向。有没有办法在所有四个方向上实现正确的提升

    static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
    static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2;
    static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8;
    static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216;
    static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162;

    - (void)textFieldDidBeginEditing:(UITextField *)textField {
        UIInterfaceOrientation orientation =    [Globals getUIInterfaceOrientation];//[[UIApplication sharedApplication] statusBarOrientation];
        CGRect textFieldRect = [self.view.window convertRect:textField.bounds fromView:textField];
        CGRect viewRect = [self.view.window convertRect:self.view.bounds fromView:self.view];   

        CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height;
        CGFloat numerator = midline - viewRect.origin.y - MINIMUM_SCROLL_FRACTION * viewRect.size.height;
        CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) * viewRect.size.height;   
        CGFloat heightFraction = numerator / denominator;

        if (heightFraction < 0.0) {
            heightFraction = 0.0;
        }
        else if (heightFraction > 1.0) {
            heightFraction = 1.0;
        }   
        if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) 
            animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction);
        else 
            animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction);
        CGRect viewFrame = self.view.frame;
        viewFrame.origin.y -= animatedDistance;
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
        [self.view setFrame:viewFrame];    
        [UIView commitAnimations];  
    }

    - (void)textFieldDidEndEditing:(UITextField *)textField{
        CGRect viewFrame = self.view.frame;
        viewFrame.origin.y += animatedDistance;
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
        [self.view setFrame:viewFrame];    
        [UIView commitAnimations];      
    }

1 个答案:

答案 0 :(得分:0)

您可以尝试将textField的inputAccessoryView属性设置为自己。我没试过这个,但理论上它应该使textField附加到键盘上,因此总是显示:

textField.inputAccessoryView = textField;