IQKeyboardManager是iOS中解決鍵盤彈起遮擋UITextField/UITextView的一種很實(shí)用的工具。
之前我一直是添加手勢(shì)去 收起鍵盤 或者 令視圖退出編輯狀態(tài), 現(xiàn)在使用這個(gè)則無需輸入任何代碼,不需要額外的設(shè)置。
這個(gè)庫(kù)默認(rèn)支持UITextField、UITextView、UIWebView、UIScrollView、UITableView、UICollectionView.
使用IQKeyboardManager, 只需要將源文件添加到項(xiàng)目。

由于這個(gè)庫(kù)是一個(gè)單例,它一旦生效,全項(xiàng)目任何界面都有效。
控制自動(dòng)鍵盤處理事件在整個(gè)項(xiàng)目?jī)?nèi)是否啟用生效, 則需在AppDelegate里設(shè)置.
#import "IQKeyboardManager.h"
iOS delegate內(nèi)應(yīng)用入口:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 關(guān)閉設(shè)置為NO, 默認(rèn)值為NO.
[IQKeyboardManager sharedManager].enable = YES;
}
其他相關(guān)應(yīng)用如下展示:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 使用智能鍵盤
IQKeyboardManager *manager = [IQKeyboardManager sharedManager];
// 控制整個(gè)功能是否啟用
manager.enable = YES;
// 控制是否顯示鍵盤上的自動(dòng)工具條,當(dāng)需要支持內(nèi)聯(lián)編輯(Inline Editing), 這就需要隱藏鍵盤上的工具條(默認(rèn)打開)
manager.enableAutoToolbar = NO;
// 啟用手勢(shì)觸摸:控制點(diǎn)擊背景是否收起鍵盤。
manager.shouldResignOnTouchOutside = YES;
// 是否顯示提示文字
manager.shouldShowTextFieldPlaceholder = YES;
// 控制鍵盤上的工具條文字顏色是否用戶自定義,(使用TextField的tintColor屬性IQToolbar,否則色調(diào)的顏色是黑色 )
manager.shouldToolbarUsesTextFieldTintColor = YES;
return YES;
}
導(dǎo)入IQKeyboardManager后,默認(rèn)所有的頁(yè)面都有了這個(gè)功能,如果你在哪一個(gè)界面不想有這個(gè)效果可以在當(dāng)前界面控制器的生命周期方法中進(jìn)行設(shè)置:
#import "IQKeyboardReturnKeyHandler.h"
@property (nonatomic, strong) IQKeyboardReturnKeyHandler *returnKeyHandler;
最后一個(gè)TextField的返回值類型UIReturnKeyDone:
- (void)viewDidLoad {
[super viewDidLoad];
self.returnKeyHandler = [[IQKeyboardReturnKeyHandler alloc] initWithViewController:self];
// 最后一個(gè)TextField的返回值類型
self.returnKeyHandler.lastTextFieldReturnKeyType = UIReturnKeyDone;
}
如果當(dāng)某一個(gè)輸入框特定不需要鍵盤上的工具條:
textField.inputAccessoryView = [[UIView alloc] init];
需要在某個(gè)頁(yè)面禁止自動(dòng)鍵盤處理事件響應(yīng):
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
// 打開鍵盤事件響應(yīng)
[IQKeyboardManager sharedManager].enable = YES;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// 關(guān)閉鍵盤事件響應(yīng)
[IQKeyboardManager sharedManager].enable = NO;
}
- (void)dealloc {
self.returnKeyHandler = nil;
}
另外IQKeyboardManager支持屏幕旋轉(zhuǎn)功能。

最后要注意一點(diǎn),它可以自動(dòng)計(jì)算多個(gè)textField之間的先后順序,排列依據(jù)是看addSubView的先后順序。
這些目前是最常用的,夠用了,日后慢慢解鎖新用法~