IQKeyboardManager的一些坑

IQKeyboardManager使用實例

IQKeyboardManager使用起來很方便唱遭,但是也有很多坑:

一浙垫、當一個viewCtrl中禁用IQKeyboardManager上移動的效果時候算行,這個在登錄頁面會常用到;

{
    BOOL _wasKeyboardManagerEnabled;
}

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    _wasKeyboardManagerEnabled = [[IQKeyboardManager sharedManager] isEnabled];
    [[IQKeyboardManager sharedManager] setEnable:NO];
}

- (void)viewWillDisappear:(BOOL)animated{
    
    [super viewWillDisappear:animated];
    [[IQKeyboardManager sharedManager] setEnable:_wasKeyboardManagerEnabled];
}

2. 若某個類不需要使用 IQKeyboardManager梧油,可以在這個類中這樣設(shè)置,也就是說在這個類中徹底禁用IQKeyboardManager州邢。

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    IQKeyboardManager *keyboardManager =  [IQKeyboardManager sharedManager];
    keyboardManager.enable = NO;
    keyboardManager.enableAutoToolbar = NO;
}

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    IQKeyboardManager *keyboardManager =  [IQKeyboardManager sharedManager];
    keyboardManager.enable = YES;
    keyboardManager.enableAutoToolbar = YES;
}

3.項目中使用Masonry儡陨,當一個viewCtrl頁面,但是當你的 backView 【底視圖】不是 tableView 或者scrollView 時量淌。你的導(dǎo)航欄會隨著一起往上跑了骗村。

網(wǎng)上找到方法是

- (void)loadView
{
    [super loadView];
    self.view = [[UIScrollView alloc] initWithFrame:self.view.bounds];
}

上面這種方法,在沒有使用Masonry時候类少,是可以起作用的叙身,但是在使用Masonry時渔扎,導(dǎo)航欄不會向上跑了硫狞,但是控件的布局亂了。

這是因為在 IQKeyboardManagerMasonry 同時使用時晃痴,導(dǎo)航欄上移和make.right
失效的問題引起的残吩。

我也是糾結(jié)好久在這塊

在經(jīng)過多次嘗試之后你會發(fā)現(xiàn)。真正的問題所在是 IQKeyboardManagerMasonry 同時使用時倘核,控件放在 scrollView上面泣侮。masonry 的 make.right約束就會失效。但是 make.width等等其他約束還是正常的紧唱。你可以不使用 make.right約束活尊,用 make.width和 make.left代替約束隶校。
但是我覺得還是用 make.right和 make.left約束組合要好些。不要老是寫個 make.width的固定寬度蛹锰。

解決方法:

1.重寫 loadView 方法 深胳。把 self.view 替換成 scrollView。
2.背景容器視圖(back)必須設(shè)置铜犬。而且對 back 約束時 要附帶 make.width.mas_equalTo(self.view);【不寫導(dǎo)致 textField 布局的 make.right 失效】
3.子控件要直接放在self.view 上舞终。不能放在背景容器視圖(back)上面⊙⒒【放在 back上時會無法點擊敛劝,無法成為第一響應(yīng)】

#pragma mark - step 01
-(void)loadView { //不將 self.view 替換成 scrollView 會在點擊底部輸入框時 導(dǎo)航欄也一起往上跑。
    
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [scrollView setBackgroundColor:[UIColor grayColor]];
    self.view = scrollView;
}
    
/**  
 1.重寫 loadView 方法 纷宇。把 self.view 替換成 scrollView夸盟。
 
 2.背景容器視圖(back)必須設(shè)置。而且對 back 約束時 要附帶 make.width.mas_equalTo(self.view);
 【不寫導(dǎo)致 textField 布局的 make.right 失效】
 
 3.子控件要直接放在self.view 上像捶。不能放在背景容器視圖(back)上面满俗。
 【放在 back上時會無法點擊,無法成為第一響應(yīng)】
 
 */
    
- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"我是導(dǎo)航欄";
    
#pragma mark - step 02
    UIView  *back = [[UIView alloc] init];
    [self.view addSubview:back];
    [back mas_makeConstraints:^(MASConstraintMaker *make) {
    
        make.edges.mas_equalTo(self.view);
        make.width.mas_equalTo(self.view); 
        //此處必填 - 【關(guān)鍵點】 作岖。不寫導(dǎo)致 textField 布局的 make.right 失效唆垃。
        //(但是布局textField 時使用 make.width不受這句話限制。)
    }];
    
    UITextField *textView = [[UITextField alloc]initWithFrame:CGRectMake(0, 300, 100, 60)];
    textView.backgroundColor = [UIColor redColor];
#pragma mark - step 03
    [self.view addSubview:textView];
    //      [back addSubview:textView];
    //      textView 放在 back上時會無法點擊痘儡,無法成為第一響應(yīng)辕万。
    
    [textView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.view).offset(20);
        make.right.equalTo(self.view).offset(-20);
        make.top.equalTo(self.view).offset(250);
        make.height.equalTo(@30);
    }];
}
  

4. IQKeyBoardManager按鈕"Done"改成"完成"

IQUIView+IQKeyboardToolbar.m文件里面,找到這一個沉删,替換成initWIthTitle這個方法
//    IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:target action:doneAction];
IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:target action:doneAction];

注意:,要替換2個地方渐尿,一個是textfid,一個是textView

5. IQKeyBoardManager中,“完成” 按鈕的監(jiān)聽事件

[_textFid addDoneOnKeyboardWithTarget:self action:@selector(btnSearchClick)];

6.如果你不想添加一個特定的自動工具欄在鍵盤上方矾瑰,應(yīng)該添加一個類作為它的工具欄砖茸,代碼如下:

textField.inputAccessoryView = [[UIView alloc] init];

常用屬性介紹

  • sharedManager:獲取類庫的單例變量
  • enable:項目使用不使用 IQKeyboardManager 這個類庫,當然殴穴,某些頁面可以根據(jù)需要單獨設(shè)置
  • shouldResignOnTouchOutside:點擊背景頁面時是否收起鍵盤
  • shouldToolbarUsesTextFieldTintColor:控制鍵盤上的工具條文字顏色是否用戶自定義凉夯,默認為 NO
  • toolbarManageBehaviour:有多個輸入框時,可以通過點擊Toolbar 上的“前一個” “后一個”按鈕來實現(xiàn)移動到不同的輸入框
  • enableAutoToolbar:是否顯示鍵盤上的工具條
  • shouldShowTextFieldPlaceholder:是否顯示占位文字(如果輸入框有占位文字采幌,那么在 Toolbar 中默認會顯示出來)
  • placeholderFont:占位文字的字體大小
  • keyboardDistanceFromTextField:輸入框距離鍵盤的距離

用法如下:

 IQKeyboardManager *manager = [IQKeyboardManager sharedManager];
    //控制整個功能是否啟用劲够。
    manager.enable = YES;
    //控制點擊背景是否收起鍵盤
    manager.shouldResignOnTouchOutside = YES;
    //控制鍵盤上的工具條文字顏色是否用戶自定義。  注意這個顏色是指textfile的tintcolor
    manager.shouldToolbarUsesTextFieldTintColor = YES;
    //中間位置是否顯示占位文字
    manager.shouldShowTextFieldPlaceholder = YES;
    //設(shè)置占位文字的字體
    manager.placeholderFont = [UIFont boldSystemFontOfSize:17];
    //控制是否顯示鍵盤上的工具條休傍。
    manager.enableAutoToolbar = YES;
    //某個類中禁止使用工具條
    [[IQKeyboardManager sharedManager]disableToolbarInViewControllerClass:[UIViewController class]];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末征绎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子磨取,更是在濱河造成了極大的恐慌人柿,老刑警劉巖柴墩,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異凫岖,居然都是意外死亡拐邪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門隘截,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扎阶,“玉大人,你說我怎么就攤上這事婶芭《危” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵犀农,是天一觀的道長惰赋。 經(jīng)常有香客問我,道長呵哨,這世上最難降的妖魔是什么赁濒? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮孟害,結(jié)果婚禮上拒炎,老公的妹妹穿的比我還像新娘。我一直安慰自己挨务,他們只是感情好击你,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谎柄,像睡著了一般丁侄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朝巫,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天鸿摇,我揣著相機與錄音,去河邊找鬼劈猿。 笑死拙吉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的糙臼。 我是一名探鬼主播庐镐,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼恩商,長吁一口氣:“原來是場噩夢啊……” “哼变逃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起怠堪,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤揽乱,失蹤者是張志新(化名)和其女友劉穎名眉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凰棉,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡损拢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了撒犀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片福压。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖或舞,靈堂內(nèi)的尸體忽然破棺而出荆姆,到底是詐尸還是另有隱情,我是刑警寧澤映凳,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布胆筒,位于F島的核電站,受9級特大地震影響诈豌,放射性物質(zhì)發(fā)生泄漏仆救。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一矫渔、第九天 我趴在偏房一處隱蔽的房頂上張望彤蔽。 院中可真熱鬧,春花似錦庙洼、人聲如沸铆惑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽员魏。三九已至,卻和暖如春叠聋,著一層夾襖步出監(jiān)牢的瞬間撕阎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工碌补, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虏束,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓厦章,卻偏偏與公主長得像镇匀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子袜啃,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 首先汗侵,既然知道IQKeyboardManager這個iOS第三方庫,相信各位已經(jīng)在iOS開發(fā)的路上越走越遠了,使用...
    _Shj閱讀 24,916評論 13 21
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫晰韵、插件发乔、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,117評論 4 61
  • 父母做過許多令我感動的事情,但有一件事情令我至今都忘不了雪猪。 那天下午栏尚,我正在教室里用心讀書時,突然聽見有種動聽的聲...
    劉江川閱讀 196評論 0 0
  • 日歷翻至八月的最后一頁,九月就這樣悄無聲息地來了官觅,緊接著就會迎來連綿不斷的秋雨和秋天的第一片落葉古劲。 突然有點迷茫,...
    遲暮青春閱讀 1,165評論 0 2
  • 我剛剛暈倒在了地鐵上 現(xiàn)在全身都是冷汗 手還不停哆嗦 可地鐵信號好差 誰的電話都打不通 曾經(jīng)我以為我很堅強 很獨立...
    ebb3af0b4550閱讀 168評論 0 0