ZYKeyboardUtil 让键盘遮盖事件处理变得得心应手

news/2024/7/2 23:36:04


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


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


主要应对:


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

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

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

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


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


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


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


横竖屏试验:




输入控件多层嵌套: 输入控件多层嵌套




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





如何使用:


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


self.keyboardUtil = [[ZYKeyboardUtil alloc] init];


处理键盘事件:


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


__weak ViewController *weakSelf = self;

[_keyboardUtil setAnimateWhenKeyboardAppearAutomaticAnimBlock:^(ZYKeyboardUtil *keyboardUtil) {

[keyboardUtil adaptiveViewHandleWithController:weakSelf adaptiveView:weakSelf.inputViewOne, weakSelf.inputViewSecond, weakSelf.inputViewThird, weakSelf.inputViewFourth, nil];

}];


以下为附加的自定义动作Block:


//展开事件

[_keyboardUtil setAnimateWhenKeyboardAppearBlock:^(int appearPostIndex, CGRect keyboardRect, CGFloat keyboardHeight, CGFloat keyboardHeightIncrement) {

//do something when keyboard appear

}];


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


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


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


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


//收起事件

[_keyboardUtil setAnimateWhenKeyboardDisappearBlock:^(CGFloat keyboardHeight) {

//do something to restor UI when keyboard dismiss

}];


keyboardHeight为键盘收起前的高度。


//获取键盘信息

[_keyboardUtil setPrintKeyboardInfoBlock:^(ZYKeyboardUtil *keyboardUtil, KeyboardInfo *keyboardInfo) {

//you can get keyboardInfo here when animation ended

}];


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


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


http://lihuaxi.xjx100.cn/news/235258.html

相关文章

swift3.0三种反向传值

一 :通知 1.通知传值所用方法 // MARK: - private methods(内部接口) let NotifMycation NSNotification.Name(rawValue:"MyNSNotification") func tempbuttonAction() { //这个方法可以传一个值 NotificationCenter.default.post(name: NotifMycation, object: &q…

极光推送集成步骤详解

关于极光推送,本人也算做过几次,下面就给大家简单总结下我做时所遇到的问题。下面这个文件,需要你先导入极光SDK后才能调试,需要注意的是,极光推送不支持模拟器,所以需要真机调试,因此首先要做的…

【Python3爬虫】常见反爬虫措施及解决办法(二) ...

【Python3爬虫】常见反爬虫措施及解决办法(二) 这一篇博客,还是接着说那些常见的反爬虫措施以及我们的解决办法。同样的,如果对你有帮助的话,麻烦点一下推荐啦。 一、防盗链 这次我遇到的防盗链,除了前面说…

Swift3.0和OC桥接方法

1.直接在工程中commandn,出现如图,点击Header File创建桥接文件Bridging-Header.h,如图: 2.点击next,出现如图画面,一定要记得勾选第一项,再点击create创建完成。 3.配置桥接文件,点击target - …

2019年3月

分包加载 使用公众号登录微信提示  "公众号暂不支持此种登录方式" 使用已经注册过的手机号注册新的微信账号提示  "你申请注册的手机号已被其他微信号绑定,暂时不能使用该手机号注册" https://github.com/witcat/LayaWxCacheFromZip /******/ (functio…

JSPatch – 动态更新iOS APP

JSPatch是最近业余做的项目,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的原生接口,获得脚本语言的能力:动态更新APP,替换项目原生代码修复bug。 用途 是否有过这样的经历:新版本…

swift3.0最新拨打电话方法

let alertVC : UIAlertController UIAlertController.init(title: "是否拨打报警电话:10086", message: "", preferredStyle: .alert) let falseAA : UIAlertAction UIAlertAction.init(title: "取消", style: .cancel, handler: nil) let tr…

swiftswift3.0自己封装的快速构建页面的方法

//#param mark 控件 func creatLabel(frame:CGRect,text:String,textColor:UIColor,textFont:CGFloat,textAlignment:NSTextAlignment) -> UILabel { let label UILabel.init(frame: frame) label.text text label.textColor textColor label.font UIFont.systemFont(of…