ZYKeyboardUtil 两个Block搞定键盘遮盖输入控件


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

欢迎转载,请注明出处,谢谢:http://zyden.vicp.cc/zykeyboardutil/
简书地址:http://www.jianshu.com/p/0272b2f35937
开发初稿,有什么忽略不足的地方还请大家指出,感谢


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

ZYKeyboardUtil 通过lazy方式注册键盘通知监听者,核心工作围绕一个model和==三个Block==,内部类KeyboardInfo充当model存储着每次处理时所需的键盘信息。animateWhenKeyboardAppearBlock作键盘展示时的处理,animateWhenKeyboardDisappearBlock作键盘收起时的处理,而printKeyboardInfoBlock用作在必要时输出键盘信息。AppearBlock和DisappearBlock统一加入了UIViewAnimation,使用时只需要编写需要的界面变化即可。


横竖屏试验:
横竖屏试验


输入控件多层嵌套(Demo中有处理多层嵌套的代码):
输入控件多层嵌套(Demo中有处理多层嵌套的代码)


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


如何使用:

通过修改ZYKeyboardUtil.h中的宏DURATION_ANIMATION定义界面改变的动画时间长短。

#define DURATION_ANIMATION      0.5  

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

self.keyboardUtil = [[ZYKeyboardUtil alloc] init];
处理键盘事件:
//展开事件
[_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的循环引用:
__unsafe_unretained ViewController *weakSelf = self;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值