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
static
const
CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
static
const
CGFloat MINIMUM_SCROLL_FRACTION = 0.2;
static
const
CGFloat MAXIMUM_SCROLL_FRACTION = 0.6;
static
const
CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216;
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