How to show the top of the UItextfield keyboard when typing in iphone?

I have UITextfield

in which I UITextfield

value. I don't want to scroll myself or adjust keyboard

myself, I want to Keyboard

automatically adjust when I enter text in UITextfield

and always show below textfield

.

Any hints from experts would be greatly appreciated.

+3


source to share


3 answers


Here is the code I used. Basically, we're going to animate the position of the view whenever it UITextField

gets focus. To do this, we must make our UIViewController

delegate ourUITextFields

define variable from in .h file float animatedDistance

 @interface <ClassName>

    float animatedDistance;

 @end

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

     UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
     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];
     }
 }

      



Now that the view has been "pushed" when UITextField

, we want to make sure to move it down when done:

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

      

For more information visit Apple's documentation.

+1


source


Animate the frame (viewcontroller.view.frame.origin.y - 215) of your view, which contains the textbox when the textbox starts editing and back when it's finished.



Use UITextfieldDelegate Methods

0


source


You can use this class to help you do this. All you have to do is make this UITableView class for TPKeyboardAvoidingTableView. Ditto for UIScrollView and UICollectionView. You can use these classes to avoid the keyboard.

Hope this helps. And if it does, please accept.;) Thanks and greetings.

0


source