简体   繁体   English

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

[英]show textfield above keyboard for all interface orientations?

Actually In my iPhone app i used the following code to lift the view in order to show the textfield above the keyboard.实际上,在我的 iPhone 应用程序中,我使用以下代码来提升视图,以便在键盘上方显示文本字段。 My application support all four interface orientations.我的应用程序支持所有四种界面方向。 I use the following code to lift the view.我使用以下代码来提升视图。 Problem here is that it only works for portrait orientation.这里的问题是它只适用于纵向。 Is there any way to implement the correct lifting in all four orientations有没有办法在所有四个方向上实现正确的提升

    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];      
    }

You can try setting the textField's inputAccessoryView property to itsself.您可以尝试将 textField 的inputAccessoryView属性设置为自身。 I haven't tried this, but in theory it should make the textField attach itself to the keyboard and thus always be displayed:我没有尝试过,但理论上它应该使 textField 将自身附加到键盘上,因此始终显示:

textField.inputAccessoryView = textField;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM