Friday 7 February 2014

How to lift up the UIView when UITextField is editing ?

I have already return about how to lift up the view when UITextView is editing. Here is the solution of UITextField.

First i am going to declared some global varible for this Scope.

#pragma constant UITextField
  1. static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
  2. static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2;
  3. static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.6;
  4. static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216;
  5. static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162;

Now we are adding some Textfield Delegate Method :

#pragma mark UITextField delegate method
 
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return NO;
}
 
- (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;
    }
 
    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];
}
 

No comments:

Post a Comment