你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> ZYKeyboardUtil 全自動處理鍵盤遮擋事件

ZYKeyboardUtil 全自動處理鍵盤遮擋事件

編輯:IOS開發基礎

鍵盤遮蓋輸入控件或按鈕在日常app開發中避之不及,考慮各種情況下UI各種嵌套,最後還要注冊監聽再獲取指定鍵盤信息。我們可以通過鍵盤處理工具類ZYKeyboardUtil避繁就簡,利用Block的方式處理鍵盤遮蓋問題。

Demo地址:https://github.com/liuzhiyi1992/ZYKeyboardUtil

主要應對:

  • 橫豎屏鍵盤遮擋輸入控件問題

  • 第三方鍵盤多次彈出的坑

  • 視圖多層嵌套內輸入控件處理

  • 單頁面內多個輸入控件處理

ZYKeyboardUtil 通過lazy方式注冊鍵盤通知監聽者,一個Block全自動處理鍵盤遮擋事件(處理/恢復),另外附帶兩個自定義動作Block供使用者自己處理。

內部類KeyboardInfo充當model存儲著每次處理時所需的鍵盤信息。

配置animateWhenKeyboardAppearAutomaticAnimBlock即可全權交於ZYKeyboardUtil處理鍵盤遮擋輸入控件問題的發生。附帶的自定義動作Block中,animateWhenKeyboardAppearBlock作鍵盤展示時的處理,animateWhenKeyboardDisappearBlock作鍵盤收起時的處理,而printKeyboardInfoBlock用作在必要時輸出鍵盤信息。AppearBlock和DisappearBlock統一加入了UIViewAnimation,使用時只需要編寫需要的界面變化即可。

橫豎屏試驗:

7cc829d3gw1f40jj6zkspj21kw0s7n22.jpg

輸入控件多層嵌套:

第三方鍵盤分次彈出問題:

如何使用:

在我們的controller中,創建一個ZYKeyboard對象,為了讓其生存在整個頁面實現功能的時間段內,讓你的controller持有他。

self.keyboardUtil = [[ZYKeyboardUtil alloc] init];

處理鍵盤事件:

配置animateWhenKeyboardAppearAutomaticAnimBlock,即可全自動處理鍵盤升降遮擋輸入控件問題,且控件resignFirstResponder後自動還原。 只需在Block裡利用參數keyboardUtil調用adaptiveViewHandleWithController:adaptiveView:,第一個參數為當前頁面controller,第二個參數接收一個可變參數,為當前頁面內的單個/多個輸入控件或者包裹輸入控件的View。

__weak ViewController *weakSelf = self;
[_keyboardUtil setAnimateWhenKeyboardAppearAutomaticAnimBlock:^(ZYKeyboardUtil *keyboardUtil) {
[keyboardUtil adaptiveViewHandleWithController:weakSelf adaptiveView:weakSelf.inputViewOne, weakSelf.inputViewSecond, weakSelf.inputViewThird, weakSelf.inputViewFourth, nil];
}];

以下為附加的自定義動作Block:

//展開事件
[_keyboardUtil setAnimateWhenKeyboardAppearBlock:^(int appearPostIndex, CGRect keyboardRect, CGFloat keyboardHeight, CGFloat keyboardHeightIncrement) {
//do something when keyboard appear
}];

appearPostIndex是 鍵盤分次展開時(第三方鍵盤會分次展開) 用於記錄當前為同一次展開的第幾次上升。

keyboardRect為此次展開後鍵盤位置的Rect。

keyboardHeight為此次展開後鍵盤高度。

keyboardHeightIncrement為此次展開鍵盤的增量。(應付第三方鍵盤分次展開的關鍵)。

//收起事件
[_keyboardUtil setAnimateWhenKeyboardDisappearBlock:^(CGFloat keyboardHeight) {
//do something to restor UI when keyboard dismiss
}];

keyboardHeight為鍵盤收起前的高度。

//獲取鍵盤信息
[_keyboardUtil setPrintKeyboardInfoBlock:^(ZYKeyboardUtil *keyboardUtil, KeyboardInfo *keyboardInfo) {
//you can get keyboardInfo here when animation ended
}];

在這個Block的參數中可以獲得鍵盤信息keyboardInfo。

注意不要忘了通過weakSelf來避免Block的循環引用: __weak ViewController *weakSelf = self;


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved