美文网首页iOS学习笔记专注iOS开发键盘上的鼓手
浅谈IQKeyboardManager第三方库的使用

浅谈IQKeyboardManager第三方库的使用

作者: chendong_ | 来源:发表于2016-01-12 15:24 被阅读48807次

    IQKeyboardManager是iOS中解决键盘弹起遮挡UITextField/UITextView的一种很实用的工具。无需输入任何代码,不需要额外的设置。使用IQKeyboardManager的你只需要将源文件添加到项目。

    这里附上下载链接:https://github.com/hackiftekhar/IQKeyboardManager

    IQKeyboardManager支持Objective-C和swift,这里建议实用Cocoapod安装,很方便管理。

    简单总结一下IQKeyboardManager最重要的功能有以下几点:

    1.当键盘遮挡输入文本框的时候,自动上移View,使被遮挡的部分自动处于键盘的上方。


    function1.gif

    )
    导入IQKeyboardManager后,默认所有的页面都有了这个功能,如果你在哪一个界面不想有这个效果可以在当前界面控制器的生命周期方法中进行设置:

    #import <IQKeyboardManager.h>
    
    
    - (void)viewWillAppear:(BOOL)animated{
    
    [super viewWillAppear:animated];
    
     [IQKeyboardManager sharedManager].enable = NO;
    
    }
    
    - (void)viewWillDisappear:(BOOL)animated{
    
    [super viewWillDisappear:animated];
    
     [IQKeyboardManager sharedManager].enable = YES;
    
    }
    
    

    或者在 AppDelegate中注册方法:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        
      [[IQKeyboardManager sharedManager] disableInViewControllerClass:[ViewController class]];
    
        return YES;
    }
    
    

    2.在键盘上会自动添加一个工具条,工具条上有左箭头和右箭头用来切换的输入文本框,还有完成按钮用来收回键盘。


    function2.gif

    你也可以不使用这个自动工具条,设置的代码如下:

     [IQKeyboardManager sharedManager].enableAutoToolbar = NO;
    
    

    3.可以将键盘上的return按键,变为Next/Done按键,默认最后一个UITextField/UITextView的键盘return键变为Done。顺序是按照创建控件的先后顺序,而不是从上到下的摆放顺序。


    function3.gif

    设置的代码如下:

    #import <IQKeyboardReturnKeyHandler.h>
    
    @implementation ViewController
    {
        IQKeyboardReturnKeyHandler *returnKeyHandler;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        returnKeyHandler = [[IQKeyboardReturnKeyHandler alloc] initWithViewController:self];
    }
    

    4.设置点击背景收回键盘。

    - (void)viewDidLoad {
        [super viewDidLoad];
        
        [IQKeyboardManager sharedManager].shouldResignOnTouchOutside = YES;
        
    }
    
    

    5.如果你的视图有导航栏,你不想上移View时,UINavigationBar消失,如function3.gif所示,你也可以进行相应设置:
    如果你使用的是storyboard or xib,只需将当前视图视图控制器中的UIView class变为UIScrollView。

    图片.png

    如果你使用的是代码,你就需要覆盖UIViewController中的'-(void)loadView' 方法:

    -(void)loadView
    {
        UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        self.view = scrollView;
    }
    

    以上就是本人对IQKeyboardManager的功能简单理解,这个第三方库还有一些其他不怎么常用的功能,以后用到会继续更新。

    文章有不妥当的地方,还望大神多多指点。

    相关文章

      网友评论

      • 酸三角:点击Retuern. 走哪个方法呢
      • 田心今心九日:这个工具不兼容,在mrc下不行,加了选项也不行,不支持C99
        田心今心九日:@_狗尾巴草 游戏业务,有的是mrc,这个编译成静态库加配置就可以了
        _狗尾巴草:现在还有mrc的项目? 你们不更新下吗
      • Draven_Lu:ios 11 适配了吗
      • 晨阳聊电影:发现了一个bug呀这个第三方,用这个,导航栏也上移了,回不来了~
        绿豆粥与茶叶蛋:@飞翔云端的鱼 好
      • 嘿_黑羊:简洁实用,太棒了,谢谢
      • 在没老之前:楼主,这个使用了之后,UITextField的代理方法全部失效了啊?怎么解决
      • Zero1:功能1,在单独页面设置enable不能禁用哎~~
      • 主动性initiative微笑:第三条无效啊亲
      • 主动性initiative微笑:为什么我这里点NEXT 没效果呢??
      • 9471f92bf2b5:textfield的父视图如果不是self.view好像不起作用,怎么解决你
      • 番茄大叔:请问 我的输入框 放在了self.view.window上面,类似弹窗的作用,但是这个并不好用,有什么解决办法么
      • _Shj:请问下 现在使用这个第三方库 是要点击完成 才能获取textfield的文字 ,怎样改动不用点击完成也能获取textfield的输入能容呢 ?
      • 看晚霞洗澡的海鸥:刚刚在github下载的damo 编译报错:没有声明 CALayerDelegate 是什么原因呢 求大神指点下
      • Felix灬泡泡:使用IQKeyboardManager,在UITableViewController中点击空白区域,键盘不退出,怎么解决?(XCode 8.1) :sob:
        绿豆粥与茶叶蛋:@Felix灬泡泡 好
      • 乂滥好人:5.如果你的视图有导航栏,你不想上移View时,UINavigationBar消失,如function3.gif所示,你也可以进行相应设置。 楼主,这个怎么设置?
      • feng_dev:很厉害啊
        绿豆粥与茶叶蛋:@爱音乐的小峰 好
      • 49e195b73669:集成之后,我的页面点击那个textfield后,页面一动不动
      • 小打小闹hx:我用这个第三方 页面上移之后直接返回上移的页面就下不来了
      • 胡厦榕2015:为什么不用TPKeyboardAvoiding,更方便更实用。
        chendong_:@胡厦榕2015 也可以啊 看自己
      • 44b811bc27de:你好 在实现第3条的时候 我在storyBoard里创建了两个textField 但是效果是颠倒的 不知道为什么??
      • 缺舟:我想请教哈 我在导入这个框架后,我一个文本框在通过工具条上的按钮获取焦点后 触发 开始编辑的方法,我在方法里面让当前文本框失去焦点,这样就导致键盘无法收起,有谁遇到了这样的问题吗?
      • 安静的农民工:楼主,为什么我不能禁用
      • cdd48b9d36e0:楼主请问,我现在用代码设置了屏幕旋转180°,所以现在点击文本框键盘就从顶部出来了,请问这个能设置吗让键盘也旋转180从反方向出来
      • 0925ccf2b4a8:还是想问一下,使用之后发觉 textField 的协议方法全部无效了
        这个应该怎么解决呢?
        在没老之前:@sherry_sd 我也碰到这个问题了,请问怎么解决的?
      • 愚人船ios:不能禁用啊喂!! 设置了enable为NO 也无济于事
      • Biaoac:你好。能共享下你的demo吗? 为什么return键设置之后不能点击跳到下一个。求解
        多鱼影视界:@Biaoac 好的 谢谢
        Biaoac:@Swifty 这个是版本的问题 我试过了 oc 的可以 但是swift的 不行 所以,你只能桥接oc的了,我没有试过,但是应该可行。
        多鱼影视界:@Biaoac 我也碰到了同样的问题 请问解决了么 :cold_sweat:
      • Ths:楼主你试过禁用吗?这样写好像没用啊
      • my__life:第五条不行
        李小南:@kr山人 你好!我这里第五条设置也无效?请问你解决了吗? 怎么解决的呢?
      • Who昵称:第五条我这里也有点问题
        李小南:@Who昵称 你好!我这里第五条设置也无效?请问你解决了吗? 怎么解决的呢?
      • Who昵称:写的很详细,学起特别容易,
      • 我的梦想之路:谢谢你的文章,今天帮我解决了一个bug,谢谢
      • 2068e5e51f60:我终于明白这个框架是干啥使的了
      • 遛遛食:为什么禁用不了啊?
      • 8ca16feb9ff9:iOS7版本的可以用吗?做的项目都要兼容iOS7版本的...所以想问下这个库支持吗?
        zxFlyer:@mattew2040 好像不支持,从iOS8开始
      • 西瓜一号:问一下,我在终端 pod search 搜索不到,可以直接拖进工程吗
        chendong_:@dd62a5ec1961 可以的
      • 啊世ka:可以移动UIView 么?我用一个UIView 做父 UITextFiled做子
      • feng_dev:为什么好多博客都写的是要写那几行设置代码?是以前的版本要那么做么?
      • 286b23612c06:UIWebView中怎么取消左右键,换成自定义的按钮
      • 孤独感爆棚:就是你 第五条所说,我这边无效。。。
        YHWXQ简简单单的生活:@李小南 我也没找到方法解决
        李小南:@YH简简单单的生活 你好...我也遇到第五条无效的问题...请问你是怎么解决的呢?
        YHWXQ简简单单的生活:@孤独感爆棚 请问你第五条问题解决了吗?我使用的storyboard,谢谢
      • 孤独感爆棚:我从写了loadview还是不行,而且我下面的输入View不见了。。。
        25282f9e7081:我使用最新的IQKeyboardManager,今天做了scrollView添加子控件的页面,结论是:普通的frame设置很容易出问题,不能定死,但masonry是可以正常布局的,不方便的是masonry的部分语句失效,比如想通过make.left语句和make.right语句设置控件的宽度就无法奏效,只能通过left和width来控制宽度.但相对于frame语句来说,masonry能省心不少.同时采用masonry布局时,要时刻注意调用layoutIfNeeded方法,否则CGRectGetMaxY方法是无法获取frame数值的.通过一段时间的折腾,做了一个基本控件都包含的界面,使之显示正常了
        chendong_:@阿龍飛 看新的官方文档吧
        阿龍飛:@孤独感爆棚 我从写了loadview还是不行,而且我下面的输入View不见了。。。
      • ef60b7f382dc:请问,在横屏的情况下需要如何设置?
      • 59f0b36aeed4: 最后一条,把class改为UIscrollowView 如何适配呢?我这里出现中有屏幕一半小UIscrollowView.请问如何解决
        eryuxinling:@zxFlyer 我也是改为UIScrollowView,之前好的布局全乱了,你怎么解决的啊?求告知,谢谢啦
        zxFlyer:@萌萌的胡云 同样遇到问题,改为UIScrollView后布局全乱了……
        5ff3331a1a95:@萌萌的胡云 解决了没有啊,遇到同样的问题
      • a65d014e5792:写的很好,简介明了 赞一个
        chendong_:@skarcunity 多谢 嘻嘻
      • 黑羽肃霜:`[[IQKeyboardManager sharedManager] disableInViewControllerClass:[ViewController class]];`
        这句在appdelegate中不能用。 首先这个库里没有 disableInViewControllerClass 这个方法,另外就算真的有,你还要去专门导入对应的viewcontroller类。

        其实直接在didfinishlaunch里头用 [[IQKeyboardManager sharedManager] setEnable:YES]; 使能就可以了
        scyworld:@黑羽肃霜
        ``
        // 指定的控制器
        [[[IQKeyboardManager sharedManager] disabledDistanceHandlingClasses] addObject:[UIViewController class]];
        ``

      • 咖啡bu加糖:对了问个问题,类似注册,或实名认证你是Autolayout还是布局frame,能给我看看你的demo么
        咖啡bu加糖:有空给个链接或者demo都好,谢谢咯
        chendong_:@咖啡bu加糖 我用的autolayout 现在回老家了 木电脑。。。
      • 咖啡bu加糖:我页面是一个scrollview,scrollview上面有一个container View,在container 放置了控件,是masonry布局的约束,这个能帮我解决键盘弹出上移view,但是点击完成咋不恢复初始位置啊,或者怎么恢复初始位置,希望解答一下
        tankdc:@李大宝是个小胖子 我也遇到这个问题了,请问您是如何解决的?
        咖啡bu加糖:@chendong_ 那页面要加个滑动效果,所以加了个scrollview,而且点击外面手势也被子页面挡道了,不知道咋解决
        chendong_:@咖啡bu加糖 这个库里有针对auto layout的方法 masonry的就不到了 sorry。。。
      • 晨光的暖日:怎么设置键盘输入长度知道吗
      • Raybon_lee:赞一个,我直接用了,都没怎么看
      • PPAbner:楼主给力。知道这个但没用过!赞赞:+1:🏻
        PPAbner:@菜鸟的心里是水果鸟 嗯嗯!加油!
        chendong_:@beibeihenmei 毕竟新手,很感谢你的赞同。
      • 8ae158dda3f2:最后一条,我试过,设置之后,莫名其妙的多了条缝隙,在键盘和那个工具条之间,不知道什么原因。
        AKyS佐毅:@_NevinZ 如果你不想使用的话,就要去修改源码,去掉text field的placeholder
        chendong_:@_NevinZ 我设置后没有啊,你重新设置一下试试看。
      • e7fa7ee6ccb0:浅显易懂,新人学到了很多 :+1:

      本文标题:浅谈IQKeyboardManager第三方库的使用

      本文链接:https://www.haomeiwen.com/subject/lkqckttx.html