根據鍵盤調整textField(多個)位置使其不會被鍵盤擋住,textfield擋住

來源:互聯網
上載者:User

根據鍵盤調整textField(多個)位置使其不會被鍵盤擋住,textfield擋住

當一個介面上有個textField時,鍵盤出現時需要保證textField不會被鍵盤擋住。一般的做法是,監聽 UIKeyboardWillShowNotification和 UIKeyboardWillHideNotification,在通知的selector方法中通過notification.userInfo擷取鍵盤的相關資訊,然後調整介面的位置。 但是當介面上有兩個以上的textField時,問題來了:在textField之間切換的時候UIKeyboardWillShowNotification這個通知不一定會發!據觀察,只有當鍵盤的大小發生變化的時候,系統才會再次發出UIKeyboardWillShowNotification通知。。。例如數字鍵台變到英文鍵盤,鍵盤大小不變,所以不會發通知,英文鍵盤變到中文鍵盤,鍵盤大小改變,所以會再發一次willShow通知,其他類似 所以問題是:介面上有多個textField,有的被擋住了,有的沒有被擋住,想要在切換textField的時候每次都可以把目標textField移動到不被擋住的位置,怎麼辦?(最常見的,登陸介面有帳號,密碼兩個textField,兩個都輸入的時候分別要移動到合適的位置) 在 - (void)textFieldDidBeginEditing:(UITextField *)textField的時候調整位置?如果這時候鍵盤還沒出現,那這個方法的調用是在系統發UIKeyboardWillShowNotification通知之前的如果鍵盤已經出現,那系統可能不會再發UIKeyboardWillShowNotification通知,這時候你不一定知道鍵盤的大小,(而且問題是系統不一定發,如果是一定不發,那還好處理一點)如果記錄下來第一次鍵盤出現時鍵盤的大小,切換textField的時候依然用這個儲存的大小,那調整的位置可能不準。。。如果針對這一個viewController來寫死某些數值的話,那適配3.5寸或者4寸或者4.7寸或者5.5寸螢幕的時候,又該出問題了 這個問題困擾了我很久,後來研究了github上大神的代碼,才找到比較理想的解決方案,大神的第三方庫: TPKeyboardAvoiding IQKeyboardManager 這兩個庫都很好的解決了上述問題,但 TPKeyboardAvoiding用起來稍微有點麻煩,需要繼承, IQKeyboardManager功能很強大,但是相對也就比較複雜,我是沒看懂怎麼用(慚愧)。。。 所以我就自己寫了一個庫,基本也解決了上述的問題,功能也相對簡單,用起來也相對簡單。demo地址:https://github.com/Phelthas/LXMKeyboardManager 核心思路是:1,用一個單獨的類來儲存keyboard的相關狀態2,把textField調整到螢幕可視範圍內的適當位置,而不是緊貼著鍵盤(參考TPKeyboardAvoiding的思路)3,用一個isKeyboardShow的屬性來記錄鍵盤是否已經出現,然後根據這個狀態來做出不同的調整4,鍵盤通知的selector裡只需處理isKeyboardShow的狀態 效果 現在可以支援scrollView,tableView,collectionView或者cell上的textField,其他有需要可以再加如果有什麼bug,歡迎指出,大家一起討論 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.