获取系统键盘所在的View
2016-05-31 10:44
267 查看
实际开发过程中,会有自定义键盘的需求,比如,需要添加一个表情键盘。本文提供一种解决方法,思路就是通过获取系统键盘所在的view,然后自定义一个view覆盖在系统键盘view上,接下来的事情就非常简单了,就是在自定义的view里做任何自己想做的事情。
这个方法的关键在于获取系统键盘所在的view。要完成这个,需要监听UIKeyboardDidShowNotification这个系统通知(注意:如果在UIKeyboardWillShowNotification这个系统通知里处理是不会得到键盘所在view的)。代码如下:
keyboardDidShow函数实现:
关键函数getKeyboardView的实现,该函数返回键盘所在view:
下面的事情就简单了,只要自定义一个view,并调用上面得到的keyboardView的addSubView函数,即可将自定义view覆盖在键盘view之上。然后,做自己想做的事情吧。
这个方法的关键在于获取系统键盘所在的view。要完成这个,需要监听UIKeyboardDidShowNotification这个系统通知(注意:如果在UIKeyboardWillShowNotification这个系统通知里处理是不会得到键盘所在view的)。代码如下:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
keyboardDidShow函数实现:
- (void)keyboardDidShow:(NSNotification *)notification{ UIView *keyboardView = [self getKeyboardView]; }
关键函数getKeyboardView的实现,该函数返回键盘所在view:
- (UIView *)getKeyboardView{ UIView *result = nil; NSArray *windowsArray = [UIApplication sharedApplication].windows; for (UIView *tmpWindow in windowsArray) { NSArray *viewArray = [tmpWindow subviews]; for (UIView *tmpView in viewArray) { if ([[NSString stringWithUTF8String:object_getClassName(tmpView)] isEqualToString:@"UIPeripheralHostView"]) { result = tmpView; break; } } if (result != nil) { break; } } return result; }
下面的事情就简单了,只要自定义一个view,并调用上面得到的keyboardView的addSubView函数,即可将自定义view覆盖在键盘view之上。然后,做自己想做的事情吧。
相关文章推荐
- 数字证书引入的原因 CA机构 授权认证中心
- ELKstack-kibana yum安装部署方法
- linux 查看nginx 安装路径
- ELKstack-kibana yum安装部署方法
- 写一个框架的详细步骤
- windows64bit 以管理员身份运行cmd命令
- html浏览器选择执行判断浏览器种类
- 强悍的 vim —— 插件管理
- 关于cookie的一些小测试
- docker容器和宿主机的文件交互
- How to post quotes in cURL
- 《深入理解mybatis原理(五)》 MyBatis缓存机制的设计与实现
- springmvc框架引入JqueryEasyUI失败
- liunx底下db数据库比较 SQLite vs MySQL vs PostgreSQL vs Mongodb
- ELKstack-logstash yum安装部署方法
- ELKstack-logstash yum安装部署方法
- 基于Libevent的HTTP Server
- 字符串正则表达式匹配
- Mirantis OpenStack Fuel8.0离线安装(MOS8.0本地源)
- 【刷题之路】二叉树的前中后序遍历(非递归)