监听键盘状态
2016-04-18 00:45
363 查看
第一种写法,通知中心添加观察者分别观察显示和隐藏
第二种写法 二合一
获取键盘弹出的动画类型
- (void)viewDidLoad { [super viewDidLoad]; //增加监听,当键盘出现或改变时收出消息 [[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 *)aNotification { //获取键盘的高度 NSDictionary *userInfo = [aNotification userInfo]; NSValue *aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey]; CGRect keyboardRect = [aValue CGRectValue]; int height = keyboardRect.size.height; self.view.backgroundColor = [UIColor redColor]; NSLog(@"%d",height); } //当键退出时调用 - (void)keyboardWillHide:(NSNotification *)aNotification { //获取键盘的高度 NSDictionary *userInfo = [aNotification userInfo]; NSValue *aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey]; CGRect keyboardRect = [aValue CGRectValue]; int height = keyboardRect.size.height; self.view.backgroundColor = [UIColor cyanColor]; NSLog(@"结束%d",height); } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self.view endEditing:YES]; } - (void)dealloc { //移除通知 [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil]; }
第二种写法 二合一
- (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil]; } - (void)keyboardWillChangeFrame:(NSNotification *)notification { NSInteger keyboardBeginY = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].origin.y; NSLog(@"keyboardBeginY = %zd",keyboardBeginY); } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self.view endEditing:YES]; } - (void)dealloc { //移除通知 [[NSNotificationCenter defaultCenter] removeObserver:self]; }
获取键盘弹出的动画类型
//键盘尺寸 CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; //持续时间 CGFloat duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey]floatValue]; //动画类型 NSInteger anType = [[info objectForKey:UIKeyboardAnimationCurveUserInfoKey]integerValue]; [UIView animateKeyframesWithDuration:duration delay:0 options:anType animations:^{ CGRect rect = weakKeyView.frame; rect.origin.y -= kSize.height; weakKeyView.frame = rect; } completion:^(BOOL finished) { }];
相关文章推荐
- 磁盘和文件系统管理(二)
- TransparentBlt、StretchBlt与BitBlt三个函数的区别
- Android 热修补方案(AndFix)
- 如何在一个jpg图片上面叠加文字
- Java正则表达式
- SQL Server 父子迭代查询语句,树状查询(转)
- 岁月蹉跎
- Mysql命令行添加用户
- C++混合编程之idlcpp教程Lua篇(7)
- sublime text 插件
- c/c++返回值为指针、引用时注意的地方
- .net源码分析 – Dictionary<TKey, TValue>
- listview超级优化的adapter
- 团队作业(三)
- nginx 一二事(2) - 创建虚拟静态服务器
- 修改MySQL 5.7.9版本的root密码方法以及一些新变化整理
- [CareerCup] 17.1 Swap Number In Place 互换位置
- valgrind的使用
- 全面解读WM_NOTIFY
- 有价值第三方库