1

Actually In my iPhone app i used the following code to lift the view in order to show the textfield above the keyboard. 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];      
    }
  • Look at this post.. [link][1] [1]: http://stackoverflow.com/questions/1126726/how-to-make-a-uitextfield-move-up-when-keyboard-is-present – Baby Groot Aug 16 '11 at 09:31

1 Answers1

0

You can try setting the textField’s inputAccessoryView property to itsself. I haven't tried this, but in theory it should make the textField attach itself to the keyboard and thus always be displayed:

textField.inputAccessoryView = textField;
mxcl
  • 24,446
  • 11
  • 91
  • 95