Thursday, February 28, 2013

Sliding Up UITextFields which are hidden by the keyboard in iOS

First, declare the following constants somewhere at the top of the view controller's implementation file. 

CGFloat animatedDistance;


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;

When the textfield will be touched, we will get the rect of the textfield and convert everything to the window coordinates.

Then we calculate the fraction between the top and bottom of the middle section for the text field's midline.

Then we will clamp this fraction so that the top section is all "0.0" and the bottom section is all "1.0".

Then this fraction is converted to scroll according to the keyboards height.

Finally, apply the animation.

Hide the keyboard when you touch outside of an UITextField in iOS

On viewDidLoad add the following lines:

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
[self.view addGestureRecognizer:gestureRecognizer];

Then add the following function somewhere in the implementation file.

- (void) hideKeyboard {
[activeField resignFirstResponder];

Here activeField is an UITextField object. Declare it somewhere at the top of the view controller's implementation file.