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

智藝發表於2016-05-19

鍵盤遮蓋輸入控制元件或按鈕在日常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,使用時只需要編寫需要的介面變化即可。

橫豎屏試驗:

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

輸入控制元件多層巢狀:

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

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

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

如何使用:

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

處理鍵盤事件:

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

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

appearPostIndex是 鍵盤分次展開時(第三方鍵盤會分次展開) 用於記錄當前為同一次展開的第幾次上升。
keyboardRect為此次展開後鍵盤位置的Rect。
keyboardHeight為此次展開後鍵盤高度。
keyboardHeightIncrement為此次展開鍵盤的增量。(應付第三方鍵盤分次展開的關鍵)。

keyboardHeight為鍵盤收起前的高度。

在這個Block的引數中可以獲得鍵盤資訊keyboardInfo。

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

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

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

相關文章