键盘遮盖输入控件或按钮在日常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;

ZYKeyboardUtil 全自动处理键盘遮挡事件的更多相关文章

  1. 『零行代码』解决键盘遮挡问题(iOS)

    关注仓库,及时获得更新:iOS-Source-Code-Analyze https://github.com/draveness/iOS-Source-Code-Analyze Follow: Dra ...

  2. iOS键盘遮挡问题解决办法

    iOS开发之“键盘遮挡输入框的解决办法”之一 -----键盘通知之前处理这种问题,总是在触发输入框编辑事件键盘弹出的时候,将当前的View整体向上移动,结束编辑又整体向下移,耗时耗力效率低. 在网上看 ...

  3. iOS- UITextView与键盘回收与键盘遮挡输入框

    一.UITextView 可以实现多行输入的文本框,基本属性与UITextField相似,可以输入多行,可以滚动.UITextView还有个代理方式- (BOOL)textView:(UITextVi ...

  4. 移动端底部input被弹出的键盘遮挡

    https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollIntoView 移动端input被键盘遮挡,事件是跳到可视区域! doc ...

  5. H5 移动端 键盘遮挡焦点元素解决方案

    前言 最近在做 webapp,遇到了很多移动端兼容的问题,其中一个问题就是:输入框触发 focus 后,键盘弹出,然后遮住了输入框. 然后在Android和IOS上,这个问题的表现形式不一样,而原生键 ...

  6. React-native键盘遮挡输入框问题的解决

    2016年10月25日更新: 现在有一个更准确一点的做法是用一个View包裹住TextInput,然后通过该View的onLayout方法获取该输入框的y轴位置,再减去一个适当的高度去处理scroll ...

  7. iOS 开发之路(登陆页键盘遮挡输入框问题)一

    在学习开发登陆页的时候,遇到的问题分享如下: 首先是swift 3.0 中,NotificationCenter 设置 selector 如下: @IBOutlet weak var bottomCo ...

  8. iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

    1.表单键盘遮挡 应用场景为一个collectionView上有多个textfield.textView供用户填写信息. 之前输入项较少时,采取的方法比较粗暴,didSelectItemAtIndex ...

  9. Android软键盘遮挡的四种解决方案

    问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入 ...

随机推荐

  1. 【算法】一般冒泡排序 O(n^2) 稳定的 C语言

    冒泡排序 一.算法描述 假设序列中有N个元素: 第一趟选取第一个元素作为关键字,从左至右比较,若遇到比它小的则放到它左边(也即两数进行交换),若遇到比它大的,则改为选取该元素作为关键字完成后续的比较, ...

  2. vs2015安装没有wim32

    刚开始在官网上下载VS2015没在意太多,选择了默认安装,结果是没有win64的,所以就不能写c代码.默认安装很多库都没有,所以要什么都得下载.转载一篇文章

  3. Hbase Java API程序设计步骤

    http://www.it165.net/admin/html/201407/3390.html 步骤1:创建一个Configuration对象 包含了客户端链接Hbase服务所需的全部信息: zoo ...

  4. jdk1.5 jdk1.6 jdk1.7 jdk1.8 下载地址

    是不是有很多朋友在oracle找不到历史版本的下载地址哈.... 下载我亲情奉献,有人的捧个人场..... 嘻嘻 jdk1.5updatex所有版本下载地址: http://www.oracle.co ...

  5. PL/SQL游标使用

    游标是用来处理使用SELECT语句从数据库中检索到的多行记录的工具.借助游标的功能,数据库应用程序可以对一组记录逐个进行处理,每次处理一行. 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中 ...

  6. Node.js权威指南 (8) - 创建HTTP与HTTPS服务器及客户端

    8.1 HTTP服务器 / 177 8.1.1 创建HTTP服务器 / 177 8.1.2 获取客户端请求信息 / 182 8.1.3 转换URL字符串与查询字符串 / 184 8.1.4 发送服务器 ...

  7. UC全屏

    UC浏览器U3内核扩展接口定义

  8. Linux Shell编程(17)——嵌套循环

    嵌套循环就是在一个循环中还有一个循环,内部循环在外部循环体中.在外部循环的每次执行过程中都会触发内部循环,直到内部循环执行结束.外部循环执行了多少次,内部循环就完成多少次.当然,不论是外部循环或内部循 ...

  9. apple ID的重要性

    当手机丢失时,您可以将对应的产品码提供给运营商,提高找回丢失手机的可能性.         2.去App store下载“查找我的iPhone(Find My iPhone)”,立刻安上,用你的app ...

  10. 社区发现(Community Detection)算法 [转]

    作者: peghoty 出处: http://blog.csdn.net/peghoty/article/details/9286905 社区发现(Community Detection)算法用来发现 ...