原文地址:http://www.jianshu.com/p/01c0682003a9
每一個iOS應用的開發者在工作中都會遇到需要用戶鍵盤輸入數據的需求,而輸入框(UITextField/UITextView)的父界面可能是普通的UIView,也可能是UIScrollView,UITableView,UICollectionView 等。而如果輸入框位於屏幕的底部,彈起的鍵盤很可能覆蓋輸入框,導致用戶就看不到輸入結果,體驗較差。
IQKeyboardManager 爲此應運而生,使用IQKeyboardManager可以很容易地解決彈起鍵盤遮蓋輸入框的問題,並且易於集成,不需要侵入性地繼承特定的類,也不需要實現某些奇怪的協議,滿足大部分需求只需要少於5行代碼。更讓人驚喜的是IQKeyboardManager已經提供Swift版本。
首先下載第三方庫源碼導入已有項目中(也可以使用CocoaPods), 然後只需要一行代碼就可控制自動鍵盤處理事件在整個項目內是否啓用。
// iOS delegate內應用入口
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//關閉設置爲NO, 默認值爲NO.
[IQKeyboardManager sharedManager].enable = YES;
}
如果產品需要當鍵盤彈起時,點擊背景收起鍵盤,也是一行代碼解決。
[IQKeyboardManager sharedManager].shouldResignOnTouchOutside = YES;
而當產品需要支持內聯編輯(Inline Editing), 這就需要隱藏鍵盤上的工具條(默認打開)
[IQKeyboardManager sharedManager].enableAutoToolbar = NO;
如果當某一個輸入框特定不需要鍵盤上的工具條時,一行代碼
textField.inputAccessoryView = [[UIView alloc] init];
如果因爲不知名的原因需要在某個頁面禁止自動鍵盤處理事件相應,也很簡單。
- (void) viewWillAppear: (BOOL)animated {
//打開鍵盤事件相應
[IQKeyboardManager sharedManager].enable = YES;
}
- (void) viewWillDisappear: (BOOL)animated {
//關閉鍵盤事件相應
[IQKeyboardManager sharedManager].enable = NO;
}
另外IQKeyboardManager支持屏幕旋轉功能,這對一些應用特別有用。
請注意的是,IQKeyboardManager還有一些未解決的問題列表(點擊這裏), 如果使用過程發現問題,可以對照參考,免得浪費不必要的時間。
思考題:如何替換IQKeyboardManager內默認提供鍵盤上的工具條視圖?
推薦閱讀: