zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    工作的价值
    面对伤害该不该回击
    建议
    利用私有的API获得手机上所安装的所有应用信息(包括版本,名称,bundleID,类型)
    你必须知道的HTTP错误
    静态库制作
    MDM证书申请的流程
    IOS客户端实现RSA加密
    获得appstore里面app的最新的版本信息,进行版本更新
    C语言实现简单php自定义扩展
  • 原文地址:https://www.cnblogs.com/fengmin/p/5518715.html
Copyright © 2011-2022 走看看