ZYKeyboardUtil 全自动处理键盘遮挡事件
键盘遮盖输入控件或按钮在日常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 全自动处理键盘遮挡事件的更多相关文章
- 『零行代码』解决键盘遮挡问题(iOS)
关注仓库,及时获得更新:iOS-Source-Code-Analyze https://github.com/draveness/iOS-Source-Code-Analyze Follow: Dra ...
- iOS键盘遮挡问题解决办法
iOS开发之“键盘遮挡输入框的解决办法”之一 -----键盘通知之前处理这种问题,总是在触发输入框编辑事件键盘弹出的时候,将当前的View整体向上移动,结束编辑又整体向下移,耗时耗力效率低. 在网上看 ...
- iOS- UITextView与键盘回收与键盘遮挡输入框
一.UITextView 可以实现多行输入的文本框,基本属性与UITextField相似,可以输入多行,可以滚动.UITextView还有个代理方式- (BOOL)textView:(UITextVi ...
- 移动端底部input被弹出的键盘遮挡
https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollIntoView 移动端input被键盘遮挡,事件是跳到可视区域! doc ...
- H5 移动端 键盘遮挡焦点元素解决方案
前言 最近在做 webapp,遇到了很多移动端兼容的问题,其中一个问题就是:输入框触发 focus 后,键盘弹出,然后遮住了输入框. 然后在Android和IOS上,这个问题的表现形式不一样,而原生键 ...
- React-native键盘遮挡输入框问题的解决
2016年10月25日更新: 现在有一个更准确一点的做法是用一个View包裹住TextInput,然后通过该View的onLayout方法获取该输入框的y轴位置,再减去一个适当的高度去处理scroll ...
- iOS 开发之路(登陆页键盘遮挡输入框问题)一
在学习开发登陆页的时候,遇到的问题分享如下: 首先是swift 3.0 中,NotificationCenter 设置 selector 如下: @IBOutlet weak var bottomCo ...
- iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging
1.表单键盘遮挡 应用场景为一个collectionView上有多个textfield.textView供用户填写信息. 之前输入项较少时,采取的方法比较粗暴,didSelectItemAtIndex ...
- Android软键盘遮挡的四种解决方案
问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入 ...
随机推荐
- main函数的参数
一.main的参数 形式:int main(int argc,char *argv[]) 参数argc.argv可以被看做是main函数的形参,argc是整型变量,代表的是参数的个数:argv是指向字 ...
- patchca整合Spring MVC生成超炫的验证码
转载:http://lavasoft.blog.51cto.com/62575/1406947 @Controller public class Login2Controller { priv ...
- JQUERY 插件开发——LAZYLOADIMG(预加载和延迟加载图片)
开发背景 本插件开发是近期写的最后一个插件了,接下来我想把最近研究的redis最为一个系列阐述下.当然Jquery插件开发是我个人爱好,我不会停止,在将来的开发中我会继续完善,当然也会坚持写这个系列的 ...
- matlab拟合三维椭球
同学问的,查了下资料. %需要拟合的点的坐标为(0,-174.802,990.048),(0.472,-171.284,995.463),(0.413,-168.639,1003.55 ...
- 【POJ1470】Closest Common Ancestors
Description Write a program that takes as input a rooted tree and a list of pairs of vertices. For e ...
- Keil C51软件的使用
进入 Keil C51 后,屏幕如下图所示.几秒钟后出现编辑界 启动Keil C51时的屏幕 进入Keil C51后的编辑界面 简单程序的调试:学习程序设计语言.学习某种程序软件,最好的方法是直接操作 ...
- 误导人的接口(interface)
接口,interface,这个词语有误导之嫌.窃以为,这也是其名称与实际开发不符,造成难于直观理解和使用过程中产生困惑的根源.所谓名不正则言不顺:不怕生错命,最怕改坏名. 在现实生活中,接口通常是指将 ...
- Bluetooth LE(低功耗蓝牙) - 第二部分
回顾 在前面的文章中我们介绍了Bluetooth LE的背景也说明了我们在本系列文章中将要开发什么,但是还没有实际的代码.我们将在这篇文章中纠正这一点,我们将通过定义 Service/Activity ...
- BZOJ1699: [Usaco2007 Jan]Balanced Lineup排队
1699: [Usaco2007 Jan]Balanced Lineup排队 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 933 Solved: 56 ...
- 参数化时按行读取txt文件,如何去掉换行符"\n"
参数化按行读取txt,每行默认自带了回车换行操作,导致脚本报错,故而按行读取时,需要去掉默认的'\n' #coding=utf-8 from selenium import webdriver imp ...