I've had the same problem, and here is my solution. Hope it helps.
- (void) keyboardWillShow: (NSNotification*) aNotification
{
[UIView animateWithDuration: [self keyboardAnimationDurationForNotification: aNotification] animations:^{
CGSize kbSize = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
//change the frame of your talbleiview via kbsize.height
} completion:^(BOOL finished) {
}];
}
- (void) keyboardDidShow: (NSNotification*) aNotification
{
[UIView animateWithDuration: [self keyboardAnimationDurationForNotification: aNotification] animations:^{
CGSize kbSize = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
//change the frame of your talbleiview via kbsize.height
} completion:^(BOOL finished) {
}];
}
- (void) keyboardWillDisappear: (NSNotification*) aNotification
{
[UIView animateWithDuration: [self keyboardAnimationDurationForNotification: aNotification] animations:^{
//restore your tableview
} completion:^(BOOL finished) {
}];
}
- (NSTimeInterval) keyboardAnimationDurationForNotification:(NSNotification*)notification
{
NSDictionary* info = [notification userInfo];
NSValue* value = [info objectForKey: UIKeyboardAnimationDurationUserInfoKey];
NSTimeInterval duration = 0;
[value getValue: &duration];
return duration;
}
Add and remove event listeners.
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(keyboardWillShow:)
name: UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(keyboardDidShow:)
name: UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(keyboardWillDisappear:)
name: UIKeyboardWillHideNotification object:nil];
}
- (void) dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver: self name: UIKeyboardWillShowNotification object: nil];
[[NSNotificationCenter defaultCenter] removeObserver: self name: UIKeyboardDidShowNotification object: nil];
[[NSNotificationCenter defaultCenter] removeObserver: self name: UIKeyboardWillHideNotification object: nil];
}
Methion that multi events will be received during one keyboard animation.