[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
- (void)keyboardWillShow:(NSNotification *)notification
{
NSDictionary* userInfo = [notification userInfo];
NSValue* aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardRect = [aValue CGRectValue];
// Get the duration of the animation.
NSValue* animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
NSTimeInterval animationDuration;
[animationDurationValue getValue:&animationDuration];
CGPoint pt = lastEditTextField.center;
pt = [setView_ convertPoint:pt fromView:lastEditTextField.superview];
NSIndexPath* indexPath = [setView_ indexPathForRowAtPoint:pt];
[setView_ scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewRowAnimationTop animated:YES];
}
如果对键盘弹起和收起的操作一致,那么就监听 UIKeyboardWillChangeFrameNotification 这个通知,响应函数实现:(IOS7下验证通过)
- (void)keyboardFrameChanged:(NSNotification *)notification {
NSDictionary *userInfo = [notification userInfo];
NSNumber *animationDurationObject = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
NSValue *keyboardBeginRectObject = [userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
NSValue *keyboardEndRectObject = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
double duration = [animationDurationObject doubleValue];
CGRect begin = [keyboardBeginRectObject CGRectValue];
CGRect end = [keyboardEndRectObject CGRectValue];
BOOL isKeyboardHidden = (end.origin.y == kFullWindowHeight);
float deltaHeight = 0;
// show or hide
if (begin.size.height != end.size.height || begin.origin.y != end.origin.y) {
deltaHeight = begin.origin.y - end.origin.y;
} else {
// change from other input way to jiu gong ge , height and y is both equal
deltaHeight = end.size.height - _lastKeyboardHeight;
}
// rember last keyboard height value
_lastKeyboardHeight = end.size.height;
CGRect newFrame = _avatarMessagesView1.frame;
newFrame.size.height -= deltaHeight;
....
}