關於UITextfield彈出鍵盤解決方案


解決的問題:當你點擊一個UITextfield時,不想讓其彈出鍵盤,如果你覺得不就是取消其第一響應者嘛,resignRespond一下不就行了嘛,確實,如果你只是在其編輯完成后讓其鍵盤消失,那這個就夠了,但是如果你想在編輯前讓其消失呢?闡述下自己遇到的情況先:就是需要做一個地區的輸入框(是一個UITextfield),但可以分自動獲取和手動輸入,當你第一次點擊時,需要彈出block讓你選擇你輸入類型,點擊的實現是在UITextfield上添加addTarget一個UIControlEventEditingDidBegin類型監聽。當然,接下來的操作是如果你直接點擊編輯框是沒有問題的,但是如果你點擊了另外一個UITextfield后,已經彈出了鍵盤(ios中連續點擊的是兩個UITextfield控件,鍵盤是不會消失的,所以你也不會看到切換輸入框時鍵盤連續彈入彈出),此時你若直接點擊地區那個輸入框,那么你的問題就來了,此時的鍵盤並不會消失,一種可能是你的彈出UI覆蓋在鍵盤上面或者你的彈出UI被鍵盤覆蓋。

 

解決方法:為了更好了了解解決的整個思路,同時避免被網上各種無厘頭答案所誤導,先來看下所需要了解的相關知識。

  UITextfield上的相關方法屬性:

    enable:這是個繼承自UIControl的屬性,默認是YES,注釋是 if NO, ignores touch events and subclasses may draw differently,也就是說當你設置為NO時,你添加的所有監聽事件和在上面添加的屬性都會失效。

    editing:這是自帶的屬性,注釋是A Boolean value indicating whether the text field is currently in edit mode,也就是YES和NO對應着上面的輸入指示焦點。

    addTarget上的4個點擊監聽類型, 

         UIControlEventEditingDidBegin:當文本控件中開始編輯時發送通知。

           UIControlEventEditingChanged:當控件的值發生改變時,發送通知

           UIControlEventEditingDidEnd : 當文本控件中編輯結束時發送通知。

           UIControlEventEditingDidEndOnExit:當文本控件內通過按下回車鍵(或等價行為)結束編輯時,發送通知。

          如果你想對上面幾個點擊事件進行監聽,你可以去實現UITextfieldDelegate的相應方法。

  下面進入解決:

    這個也可以分幾種情況:

      1.你的頁面所有的UITextfield都需要在點擊時消除掉鍵盤先的話,你可以直接用UITextfield的addTarget方法監聽,代碼如下:

        [_mainView.sexInfoView.tailTextField addTarget:self action:@selector(setSex:) forControlEvents:UIControlEventEditingDidBegin];

      同時,你實現代理方法

        - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{

            //    此處加入你想要執行的代碼

            return  NO;

        }

        2.你的頁面只有部分UITextfield需要,那么,此時你就不能通過UITextfield的監聽方法了,那么你可以怎么做呢?你可以直接把監聽事件改用gesture的監聽就行了嘛,具體代碼如下:

       UITapGestureRecognizer *sexTap=[[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(setSex:)];

         [_mainView.sexInfoView.tailTextFieldaddGestureRecognizer:sexTap];

 

總結:或許,看到最后你覺得其實也挺簡單的嘛,可是如果你上網搜下,你就會發現這個問題困擾了很多人,而且很多的答案誤導。。關於文中提到的UIControl,想要了解的話可以看下往期的博客,想要更加了解直接前往ios官網。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM