ZYKeyboardUtil 讓處理鍵盤遮蓋輸入事件變得得心應(yīng)手

Demo地址:https://github.com/liuzhiyi1992/ZYKeyboardUtil
我博客原文:http://zyden.vicp.cc/zykeyboardutil/
歡迎轉(zhuǎn)載,請(qǐng)注明出處,謝謝



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

主要應(yīng)對(duì):

  • 橫豎屏鍵盤遮擋輸入控件問(wèn)題
  • 第三方鍵盤多次彈出的坑
  • 視圖多層嵌套內(nèi)輸入控件處理
  • 單頁(yè)面內(nèi)多個(gè)輸入控件處理

ZYKeyboardUtil 通過(guò)lazy方式注冊(cè)鍵盤通知監(jiān)聽者,一個(gè)Block全自動(dòng)處理鍵盤遮擋事件(處理/恢復(fù)),另外附帶兩個(gè)自定義動(dòng)作Block供使用者自己處理。內(nèi)部類KeyboardInfo充當(dāng)model存儲(chǔ)著每次處理時(shí)所需的鍵盤信息。

配置animateWhenKeyboardAppearAutomaticAnimBlock即可全權(quán)交于ZYKeyboardUtil處理鍵盤遮擋輸入控件問(wèn)題的發(fā)生。
附帶的自定義動(dòng)作Block中,animateWhenKeyboardAppearBlock作鍵盤展示時(shí)的處理,animateWhenKeyboardDisappearBlock作鍵盤收起時(shí)的處理,而printKeyboardInfoBlock用作在必要時(shí)輸出鍵盤信息。AppearBlock和DisappearBlock統(tǒng)一加入了UIViewAnimation,使用時(shí)只需要編寫需要的界面變化即可。



橫豎屏試驗(yàn):

橫豎屏試驗(yàn)
橫豎屏試驗(yàn)



輸入控件多層嵌套:

輸入控件多層嵌套
輸入控件多層嵌套



第三方鍵盤分次彈出問(wèn)題:

第三方鍵盤分次彈出問(wèn)題
第三方鍵盤分次彈出問(wèn)題


如何使用:

在我們的controller中,創(chuàng)建一個(gè)ZYKeyboard對(duì)象,為了讓其生存在整個(gè)頁(yè)面實(shí)現(xiàn)功能的時(shí)間段內(nèi),讓你的controller持有他。

self.keyboardUtil = [[ZYKeyboardUtil alloc] init];
處理鍵盤事件:

配置animateWhenKeyboardAppearAutomaticAnimBlock,即可全自動(dòng)處理鍵盤升降遮擋輸入控件問(wèn)題,且控件resignFirstResponder后自動(dòng)還原。
只需在Block里利用參數(shù)keyboardUtil調(diào)用adaptiveViewHandleWithController:adaptiveView:,第一個(gè)參數(shù)為當(dāng)前頁(yè)面controller,第二個(gè)參數(shù)接收一個(gè)可變參數(shù),為當(dāng)前頁(yè)面內(nèi)的單個(gè)/多個(gè)輸入控件或者包裹輸入控件的View。

__weak ViewController *weakSelf = self;
[_keyboardUtil setAnimateWhenKeyboardAppearAutomaticAnimBlock:^(ZYKeyboardUtil *keyboardUtil) {
    [keyboardUtil adaptiveViewHandleWithController:weakSelf adaptiveView:weakSelf.inputViewOne, weakSelf.inputViewSecond, weakSelf.inputViewThird, weakSelf.inputViewFourth, nil];
}];
以下為附加的自定義動(dòng)作Block:
//展開事件
[_keyboardUtil setAnimateWhenKeyboardAppearBlock:^(int appearPostIndex, CGRect keyboardRect, CGFloat keyboardHeight, CGFloat keyboardHeightIncrement) {
    //do something when keyboard appear
}];

appearPostIndex是 鍵盤分次展開時(shí)(第三方鍵盤會(huì)分次展開) 用于記錄當(dāng)前為同一次展開的第幾次上升。
keyboardRect為此次展開后鍵盤位置的Rect。
keyboardHeight為此次展開后鍵盤高度。
keyboardHeightIncrement為此次展開鍵盤的增量。(應(yīng)付第三方鍵盤分次展開的關(guān)鍵)。


//收起事件
[_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
}];

在這個(gè)Block的參數(shù)中可以獲得鍵盤信息keyboardInfo。

注意不要忘了通過(guò)weakSelf來(lái)避免Block的循環(huán)引用:
__weak ViewController *weakSelf = self;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,425評(píng)論 4 61
  • 卓麥閱讀 185評(píng)論 2 1
  • 1. air freight, enormous, greenhouse gases e.g. Air freig...
    Veronica小君君閱讀 227評(píng)論 0 0
  • 高聳的大樓,寬闊的馬路 就連自己住的是小區(qū)哪棟樓 都難以分辨 請(qǐng)點(diǎn)擊此處輸入圖片描述 一望無(wú)際的街道,川流不息的車...
    良有方閱讀 369評(píng)論 0 0
  • 凌晨三點(diǎn)二十(首先聲明,我知道我在違反規(guī)則),剛剛轉(zhuǎn)了一圈病房,除了一個(gè)老爺子睡糊涂不知身在何處,其他病人都...
    遠(yuǎn)山如黛118近水含煙閱讀 456評(píng)論 0 0

友情鏈接更多精彩內(nèi)容