Reputation: 264
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
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
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
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