I would to resize a UITableView and slide up a UIView that contains a UITextField when this field is fired. These are two simple mockups:


Now I have this code:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.3];
[UIView setAnimationBeginsFromCurrentState:YES];
[myView setFrame:CGRectMake(myView.frame.origin.x, myView.frame.origin.y - 167, myView.frame.size.width, myView.frame.size.height)]; // 216 (keyboard's height) - 49 (tabbar's height) = 167
[UIView commitAnimations];
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.3];
[UIView setAnimationBeginsFromCurrentState:YES];
[myView setFrame:CGRectMake(myView.frame.origin.x, myView.frame.origin.y + 167, myView.frame.size.width, myView.frame.size.height)];
[UIView commitAnimations];
return TRUE;
}
The problem is that the keyboard slide up animation and the myView slide up animation are not synchronous. How to make these two animation perfectly synchronous?
And how to resize the UITableView when the keyboard is visible and return to the original height when keyboard will hide?
The short answer is that you need to subscribe to
UIKeyboardWillShowNotificationandUIKeyboardWillHideNotification. Those notifications contain the exact parameters of the keyboard animation.The long answer is https://stackoverflow.com/a/8704371/77567.
Regarding your tab bar: the answer I linked assumes you want to slide your view down to the bottom edge of the screen when the keyboard is dismissed. Since you want to slide it down to the edge of the tab bar, you need to look at whether the keyboard is hiding or showing (by checking
note.name). If it’s showing, you should save the current frame of the view in an instance variable. If it’s hiding, you should set the view’s new frame to that frame you saved in an instance variable, instead of setting it based on the keyboard’s end frame.