键盘遮盖输入控件或按钮在日常app开发中避之不及,考虑各种情况下UI各种嵌套,最后还要注册监听再获取指定键盘信息。我们可以通过键盘处理工具类ZYKeyboardUtil避繁就简,利用Block的方式处理键盘遮盖问题。

Demo地址: https://github.com/liuzhiyi1992/ZYKeyboardUtil

主要应对:

  • 横竖屏键盘遮挡输入控件问题

  • 第三方键盘多次弹出的坑

  • 视图多层嵌套内输入控件处理

  • 单页面内多个输入控件处理

ZYKeyboardUtil 通过lazy方式注册键盘通知监听者, 一个Block 全自动处理键盘遮挡事件(处理/恢复),另外附带两个自定义动作Block供使用者自己处理。

内部类KeyboardInfo充当model存储着每次处理时所需的键盘信息。

配置animateWhenKeyboardAppearAutomaticAnimBlock即可全权交于ZYKeyboardUtil处理键盘遮挡输入控件问题的发生。附带的自定义动作Block中,animateWhenKeyboardAppearBlock作键盘展示时的处理,animateWhenKeyboardDisappearBlock作键盘收起时的处理,而printKeyboardInfoBlock用作在必要时输出键盘信息。AppearBlock和DisappearBlock统一加入了UIViewAnimation,使用时只需要编写需要的界面变化即可。

横竖屏试验:

输入控件多层嵌套:

第三方键盘分次弹出问题:

如何使用:

在我们的controller中,创建一个ZYKeyboard对象,为了让其生存在整个页面实现功能的时间段内,让你的controller持有他。

self.keyboardUtil = [[ZYKeyboardUtilalloc] init];
处理键盘事件:

配置animateWhenKeyboardAppearAutomaticAnimBlock ,即可全自动处理键盘升降遮挡输入控件问题,且控件resignFirstResponder后自动还原。 只需在Block里利用参数keyboardUtil调用adaptiveViewHandleWithController:adaptiveView:,第一个参数为当前页面controller,第二个参数接收一个可变参数,为当前页面内的单个/多个输入控件或者包裹输入控件的View。

__weakViewController *weakSelf = self;
[_keyboardUtilsetAnimateWhenKeyboardAppearAutomaticAnimBlock:
^(ZYKeyboardUtil *keyboardUtil) {
[keyboardUtiladaptiveViewHandleWithController:
weakSelfadaptiveView:
weakSelf.inputViewOne, weakSelf.inputViewSecond,
weakSelf.inputViewThird,
weakSelf.inputViewFourth, nil];
}];
以下为附加的自定义动作Block:
//展开事件

[_keyboardUtilsetAnimateWhenKeyboardAppearBlock:
^(int appearPostIndex, CGRectkeyboardRect, CGFloatkeyboardHeight, CGFloatkeyboardHeightIncrement) {
//do something when keyboard appear
}];

appearPostIndex是 键盘分次展开时(第三方键盘会分次展开) 用于记录当前为同一次展开的第几次上升。

keyboardRect为此次展开后键盘位置的Rect。

keyboardHeight为此次展开后键盘高度。

keyboardHeightIncrement为此次展开键盘的增量。(应付第三方键盘分次展开的关键)。

//收起事件[_keyboardUtilsetAnimateWhenKeyboardDisappearBlock:
^(CGFloatkeyboardHeight) {
//do something to restor UI when keyboard dismiss
}];

keyboardHeight为键盘收起前的高度。

//获取键盘信息

[_keyboardUtilsetPrintKeyboardInfoBlock:
^(ZYKeyboardUtil *keyboardUtil, KeyboardInfo *keyboardInfo) {
//you can get keyboardInfo here when animation ended
}];

在这个Block的参数中可以获得键盘信息keyboardInfo。

注意不要忘了通过weakSelf来避免Block的循环引用: __weak ViewController *weakSelf = self;

最新文章

  1. Solr学习总结(四)Solr查询参数
  2. 连续值的CART(分类回归树)原理和实现
  3. 通过SEP屏蔽共享文件夹
  4. MFC程序中消息以及函数的处理顺序简介[转]
  5. Nginx 301重定向域名
  6. ios开发——实用技术篇&XML协议详解
  7. wzplayer for ios 针对(mms)优化版本V1.0
  8. QTP特点有哪些?
  9. VMI
  10. koa/redux middleware系统解析
  11. LeetCode之“链表”:Reorder List
  12. oracle数据库实例启动与关闭
  13. 《python语言程序设计》_第5章_循环
  14. 3月9日(用 DBHelper 工具连接 mysql 数据库 实现登录验证)
  15. 导出csv文件数字会自动变科学计数法的解决方法
  16. golang-gorm框架支持mysql json类型
  17. CentOS7.2使用yum配置LNMP环境
  18. 【xshell属性设置】如何修改xshell字体大小
  19. leetCode 86.Partition List(分区链表) 解题思路和方法
  20. 【Codeforces】Round #488 (Div. 2) 总结

热门文章

  1. python中的函数的参数和可变参数
  2. 黑马程序员——vim编辑器的使用
  3. Spring MVC 统一异常处理
  4. JavaScript中url 传递参数(特殊字符)解决方法
  5. 在线浏览pdf文件,pdfobject的简单使用
  6. xmlns:android作用以及自定义布局属性
  7. ANDROID 中UID与PID的作用与区别
  8. 启动tomcat的 startup.bat屏幕一闪而过
  9. Java---网络编程(4)-C/S-B/S
  10. mysql数据库还原出错ERROR:Unknown command ‘\\’解决手记