[爆棧熱門(mén) iOS 問(wèn)題] 全局處理鍵盤(pán)遮擋(IQKeyboardManager作者的答案)

系列文集:爆棧熱門(mén) iOS 問(wèn)題。目錄在此。倉(cāng)薯翻譯,歡迎指正:)

問(wèn)題

iOS 上的鍵盤(pán)彈出會(huì)擋住輸入框,怎么處理?


答案

倉(cāng)薯注:處理鍵盤(pán)遮擋是 iOS 上老生常談的問(wèn)題,到處都是大段大段的代碼,本問(wèn)題下也不例外。我個(gè)人一直用 IQKeyboardManager,有動(dòng)畫(huà)/能復(fù)原/兼容 UITableView 等/基本一行代碼都不用寫(xiě),在大部分情況下能完美解決問(wèn)題。因此只在此翻譯一下 IQKeyboardManager 作者的答案。對(duì)其他答案有興趣的讀者請(qǐng)前往原文。

Mohd Iftekhar Qurashi,39 贊

想要在整個(gè)工程里全局解決這個(gè)問(wèn)題,可以使用我寫(xiě)的 IQKeyboardManager,下面是我實(shí)現(xiàn)的思路:

第1步: 我在一個(gè)單例類(lèi) IQKeyboardManager 里添加了全局監(jiān)聽(tīng) UITextField、UITextView以及UIKeyboard事件的通知。

第2步: 如果收到了
UIKeyboardWillShowNotification、UITextFieldTextDidBeginEditingNotification、 UITextViewTextDidBeginEditingNotification這些鍵盤(pán)彈出的通知,我會(huì)從UIWindow.rootViewController的 view 層級(jí)里面找到當(dāng)前位于最頂層的 ViewController,叫做topMostViewController。為了讓正在編輯的UITextFieldUITextView不被遮擋,我們要調(diào)整topMostViewController.view的 frame。

第3步: 計(jì)算出 topMostViewController.view 應(yīng)該上移多少才能把正在編輯的UITextFieldUITextView露出來(lái)。

第4步: 按照剛才算出的數(shù)值,我把topMostViewController.view.frame向上移動(dòng)。

第5步: 如果收到了
UIKeyboardWillHideNotification、UITextFieldTextDidEndEditingNotificationUITextViewTextDidEndEditingNotification這些鍵盤(pán)收起的通知,我仍然是從UIWindow.rootViewController的 view 層級(jí)里面找到當(dāng)前位于最頂層的topMostViewController。

第6步: 計(jì)算現(xiàn)在topMostViewController.view應(yīng)該下移多少才能復(fù)原。

第7步: 根據(jù)剛才算出的數(shù)值,我把topMostViewController.view.frame復(fù)原。

第8步: 我會(huì)在 app 啟動(dòng)的時(shí)候初始化 IQKeyboardManager 這個(gè)單例,所以 app 里的每一個(gè)帶有UITextFieldUITextView的地方都會(huì)自動(dòng)調(diào)整。

這些就是 IQKeyboardManager 所做的事,你真的一行代碼都不用寫(xiě)!! 只需要把相關(guān)的代碼文件拖到工程里就可以了。并且IQKeyboardManager 還支持橫豎屏旋轉(zhuǎn)、自動(dòng)顯示 UIToolBar、讀取 keyboardDistanceFromTextField,還有好多意想不到的功能~

原文地址:How to make a UITextField move up when keyboard is present

本文地址:http://www.itdecent.cn/p/b7c1e5c0d227

系列文集:爆棧熱門(mén) iOS 問(wèn)題

譯者:@戴倉(cāng)薯

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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