iOS开发第三方键盘处理实例代码

  

最近项目中遇到了键盘处理通知被调用多次的情况,废了好半天时间才找到解决办法,今天就给小伙伴儿们唠唠第三方键盘处理的那些坑!
  

  

详情请看:“https://github.com/boai/BAKeyboardDemo”!

  

<强> 1,聊天评论框的封装

  

先聊聊我项目中遇到的奇葩情况吧,一个直播界面,上面播放器、下面是分段控制器5个按钮,5个界面,其中三个界面最下面都是评论框,所以就封装了一个评论框公用。
  但是本来用的“IQKeyboardManager”,开源键盘处理框架,可是在同一个界面有多个评论框就出现问题了。

  

<强> 2,先看看“IQKeyboardManager”的使用吧:

        #进口“AppDelegate.h”      AppDelegate中添加这段代码,就可以全局不用管键盘的弹起收回了!      # pragma马克-键盘处理   - (void) completionHandleIQKeyboard   {   IQKeyboardManager *经理=[IQKeyboardManager sharedManager];   经理。使=是的;   经理。shouldResignOnTouchOutside=是的;   经理。shouldToolbarUsesTextFieldTintColor=是的;   经理。enableAutoToolbar=是的;   }   之前      

<强> 3,具体解决办法

  

但是我项目中得复杂情况就不行了,键盘弹起异常,收回也异常,尤其是用了聊天室这种视图,处理的更麻烦,不要急,看看博爱这些年踩过的坑吧:
  

  

先看看键盘处理事件吧:

        - 1,首先注册通知:   - (void) registNotification   {   [[NSNotificationCenter defaultCenter] addObserver:自我选择器:@ selector (keyboardWasShown:)名称:UIKeyboardWillShowNotification对象:nil);   [[NSNotificationCenter defaultCenter] addObserver:自我选择器:@ selector (keyboardWasHidden:)名称:UIKeyboardWillHideNotification对象:nil);   }            - 2,再把后路想好:移除通知   - (void) removeNotification   {   [[NSNotificationCenter defaultCenter] removeObserver:自我);   }      - 3,通知事件处理:/* !键盘显示要做什么*/- (void) keyboardWasShown: (NSNotification *)通知   {   NSDictionary *信息=(通知用户信息);      双时间=[UIKeyboardAnimationDurationUserInfoKey] doubleValue][信息;      CGFloat curkeyBoardHeight=[[信息objectForKey: @ " UIKeyboardBoundsUserInfoKey "] CGRectValue] .size.height;   CGRect中开始=[[信息objectForKey: @ " UIKeyboardFrameBeginUserInfoKey "] CGRectValue);   CGRect中结束=[[信息objectForKey: @ " UIKeyboardFrameEndUserInfoKey "] CGRectValue);      CGFloat keyBoardHeight;/* !第三方键盘回调三次问题,监听仅执行最后一次*/如果(begin.size。高度比;0,,(begin.origin。y - end.origin。y比;0))   {   keyBoardHeight=curkeyBoardHeight;   [UIView animateWithDuration:持续时间动画:^ {      CGRect中viewFrame=[自我getCurrentViewController] .view.frame;   viewFrame.origin。y -=keyBoardHeight;   (自我getCurrentViewController) .view.frame=viewFrame;   });   }   }      - (void) keyboardWasHidden: (NSNotification *)通知   {   NSDictionary *信息=(通知用户信息);   双时间=[UIKeyboardAnimationDurationUserInfoKey] doubleValue][信息;      [UIView animateWithDuration:持续时间动画:^ {      CGRect中viewFrame=[自我getCurrentViewController] .view.frame;   viewFrame.origin。y=0;   (自我getCurrentViewController) .view.frame=viewFrame;   });   }/* !   *获取当前视图的VC   *   * @return获取当前视图的VC   */(*)ui getCurrentViewController   {   (UIView *视图=自我;视图;视图=view.superview)   {   UIResponder * nextResponder=[视图nextResponder];   如果([nextResponder isKindOfClass: [ui类]])   {   返回(ui) nextResponder;   }   }   返回nil;   }      之前      

具体情况是这样的,在测试过程中,其他界面的评论框都没问题,就直播这个VC有问题,就一步步往下找,后来发现:iOS的第三方键盘会在【- (void) keyboardWasShown: (NSNotification *)通知】这个方法中来回调用多次,不止三次好像,然后就想到一个办法,

     /* !第三方键盘回调三次问题,监听仅执行最后一次*/如果(begin.size。高度比;0,,(begin.origin。y - end.origin。y比;0))   {   keyBoardHeight=curkeyBoardHeight;   [UIView animateWithDuration:持续时间动画:^ {      CGRect中viewFrame=[自我getCurrentViewController] .view.frame;   viewFrame.origin。y -=keyBoardHeight;   (自我getCurrentViewController) .view.frame=viewFrame;   });   }   

iOS开发第三方键盘处理实例代码