转载

新鲜出炉!ZYKeyboardUtil 让键盘遮盖事件处理变得得心应手

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

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

横竖屏试验: 新鲜出炉!ZYKeyboardUtil 让键盘遮盖事件处理变得得心应手

输入控件多层嵌套(Demo中有处理多层嵌套的代码): 新鲜出炉!ZYKeyboardUtil 让键盘遮盖事件处理变得得心应手

第三方键盘分次弹出问题: 新鲜出炉!ZYKeyboardUtil 让键盘遮盖事件处理变得得心应手

如何使用:

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

回到我们的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;

正文到此结束
Loading...