ZYKeyboardUtil 全自动处理键盘遮挡事件

Posted 驭狼共舞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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持有他。

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

处理键盘事件:

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

1
2
3
4
__weak ViewController *weakSelf = self;
[_keyboardUtil setAnimateWhenKeyboardAppearAutomaticAnimBlock:^(ZYKeyboardUtil *keyboardUtil) {
[keyboardUtil adaptiveViewHandleWithController:weakSelf adaptiveView:weakSelf.inputViewOne, weakSelf.inputViewSecond, weakSelf.inputViewThird, weakSelf.inputViewFourth, nil];
}];

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

1
2
3
4
//展开事件
[_keyboardUtil setAnimateWhenKeyboardAppearBlock:^(int appearPostIndex, CGRect keyboardRect, CGFloat keyboardHeight, CGFloat keyboardHeightIncrement) {
//do something when keyboard appear
}];

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

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

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

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

1
2
3
4
//收起事件
[_keyboardUtil setAnimateWhenKeyboardDisappearBlock:^(CGFloat keyboardHeight) {
//do something to restor UI when keyboard dismiss
}];

keyboardHeight为键盘收起前的高度。

1
2
3
4
//获取键盘信息
[_keyboardUtil setPrintKeyboardInfoBlock:^(ZYKeyboardUtil *keyboardUtil, KeyboardInfo *keyboardInfo) {
//you can get keyboardInfo here when animation ended
}];

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

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

以上是关于ZYKeyboardUtil 全自动处理键盘遮挡事件的主要内容,如果未能解决你的问题,请参考以下文章

react-native 键盘遮挡输入框

移动端键盘遮挡input问题

键盘遮挡输入框处理

[vue]利用自定义指令处理系统键盘遮挡input输入框

react-native解决键盘自适应

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