iOS 监听键盘
2018-07-20 来源:open-open
百度所查到的键盘监听大部分用的是
UIKeyboardDidShowNotification//已经显示
UIKeyboardDidHideNotification//已经隐藏
然后我自己去试一直觉得一些空间跟随键盘的移动是有时间间隔的 一直想不明白他们是怎么实现的 求大神告知 所以自己看源码发现还有
UIKeyboardWillShowNotification//将要显示
UIKeyboardDidHideNotification//将要隐藏
这样是能完美的解决问题的 至少在我自己的项目需求中是可以的
最后别忘记在控制器消失中移除观察者哦
- (void) registerForKeyboardNotifications{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasHidden:) name:UIKeyboardWillHideNotification object:nil];
}
//键盘显示注册通知
- (void) keyboardWasShown:(NSNotification *) note{
// 获取位置和大小
CGRect keyboardBounds;
[[note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue: &keyboardBounds];
NSNumber *duration = [note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
NSNumber *curve = [note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];
keyboardBounds = [self.view convertRect:keyboardBounds toView:nil];
// 获取位置和大小
CGRect containerFrame = _menuView.frame;
// 计算出y坐标
containerFrame.origin.y = self.view.bounds.size.height - (keyboardBounds.size.height + containerFrame.size.height);
_mnueHeight = containerFrame.origin.y;
_maxHeight = containerFrame.origin.y;
// 动画改变位置
[UIView animateWithDuration:[duration doubleValue] animations:^{
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.1];
[UIView setAnimationCurve:[curve intValue]];
// 更改位置
_menuView.frame = containerFrame;
}];
}
//键盘消失通知
- (void) keyboardWasHidden:(NSNotification *) note{
NSNumber *duration = [note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
NSNumber *curve = [note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];
// 获取位置和大小
CGRect containerFrame = _menuView.frame;
containerFrame.origin.y = self.view.bounds.size.height - containerFrame.size.height;
// 动画改变位置
[UIView animateWithDuration:[duration doubleValue] animations:^{
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:[duration doubleValue]];
[UIView setAnimationCurve:[curve intValue]];
// 更改位置
_menuView.frame = containerFrame;
}];
}
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
下一篇:iOS开发中各种版本、设备的区分