Areeba Khan
Areeba Khan

Reputation: 264

How to show keyboard upper side of UItextfield when we enter text, in iphone?

I have a UITextfield in which I am entering value. I don't want to scroll myself or adjust keyboard myself , I want Keyboard automatically adjust itself when I enter text in UITextfield and always show below the textfield.

Any hints from experts would be very welcome.

Upvotes: 3

Views: 381

Answers (3)

Shashank Kulshrestha
Shashank Kulshrestha

Reputation: 1556

Here is some code that I have used. Basically, what we're going to do is animate the position of the view whenever a UITextField gets focus. To do this, we must make our UIViewController a delegate of our UITextFields

define a variable float animatedDistance in .h of the file

 @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 up' when a UITextField is selected, we want to make sure that we slide it back down when we're 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 Visit Apple Documentation

Upvotes: 1

try catch finally
try catch finally

Reputation: 881

You can use this class which will help you to do the needful. All you need to do is make the class of that UITableView to TPKeyboardAvoidingTableView. Same for UIScrollView and UICollectionView. You can used these classes to avoid the keyboard.

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

Upvotes: 0

robhayward
robhayward

Reputation: 392

Animate the frame (viewcontroller.view.frame.origin.y - 215) of your view that contains the textfield when the textfield starts editing and back down when it is finished.

Use the UITextfieldDelegate methods

Upvotes: 0

Related Questions