天天看點

FirstResponder 釋放問題

View的FirstResponder的釋放問題

  今天遇到一個問題,當我隐藏掉一個正在接受使用者輸入的UITextField的時候,鍵盤并不會消失,而且鍵盤仍然接受使用者輸入,再次顯示該TextField時候發現在隐藏狀态下,所有的輸入仍然傳輸到了該TextField中,于是查下官方資料找到如下解釋:

Important If you hide a view that is currently the first responder, the view does not automatically resign its first responder status. Events targeted at the first responder are still delivered to the hidden view. To prevent this from happening, you should force your view to resign the first responder status when you hide it.    

  意思是如果這個View是目前的第一響應者的時候,隐藏該View并不會自動放棄其第一響應者的身份,而且會繼續以第一響應者的身份接受消息。我們可以通過在隐藏View之前,手動調用resignFirstResponder來強制該view放棄第一響應者身份。

  下面請看小例子:

FirstResponder 釋放問題
FirstResponder 釋放問題

SvTestFirstResponder.h

FirstResponder 釋放問題
FirstResponder 釋放問題

SvTestFirstResponder.m

  這個簡單的例子中,當輸入框進入接受使用者輸入狀态的時候,點選hide按鈕,鍵盤并不會消失而且會繼續接收使用者輸入并且将使用者輸入傳到TextField中去,後面再點選Show按鈕的時候你會發現所有在隐藏狀态下輸入的文字都已經成功的被接收。我們可以修改hide方法如下:

  這樣就可以在隐藏之前強制釋放第一響應者身份,這個問題比較細節,但有時候可能就是這種細節問題導緻一些莫名奇妙的問題,在隐藏一些可能成為第一響應者的view之前添加強制釋放第一響應者身份,可能會幫我們避免一些奇怪的問題,而且也幾乎不會有什麼開銷,何樂而不為呢。

部門招人: 進階iOS、Android、前端開發,有意私聊,部落客請你喝️

如果覺得本文幫到了你,記得點贊哦,當然也可以請部落客喝一杯豆漿

微信二維碼

QQ二維碼