iOS:UITextField中文輸入法輸入時對字符長度的限制


如題的問題,又是個讓我抓狂了大半天的問題,還是做個記錄,有與類似問題的同學可參考,但不一定對。具體問題還需具體分析。我遇到的需求是這樣的:有一個輸入框,輸入框內輸入文字,文字字數限制在20字。

我采用了UITextField作為我的輸入框控件,並且在委托方法:

 

中實現了對字符串的長度限制,實現如下:

 

這樣實現的結果是:對於純字符的統計沒有什么問題,當輸入的字符超過限制時輸入框便截取最大限制長度的字符串。但是,有個問題,當使用拼音輸入法時,該委托方法中的最后一個參數string接受的是輸入的字母,而不是選擇的漢字,造成的結果是,當想輸入文字“我在編程”,輸入拼音“wozaibiancheng”,每輸入一個字母便會進入委托方法,統計的字符長度是字母的長度,實際上漢字還未超過限制長度,但是字母的長度超過了導致無法繼續輸入。

而且,致命的是,這個委托方法並不響應,選中候選漢字的過程,這就沒有辦法重新修正字符長度的統計了。

網上查了一些方法,有個叫Onyx的博主寫了篇文章:iOS中UITextView/UITextField 輸入英文和拼音狀態下如何正確的統計輸入的文字字數 看起來似乎是和我同樣的問題,但是當我把他的代碼搬到我的類里時,實現的結果並不理想,我沒有得到想要的結果,而且他的方法看起來似乎復雜了點,我也沒有研究清楚這個方法的問題出在哪。之所以把他的這篇博文引進來,是因為他的文章后來給了我些啟發。

我剛開始時候並沒有發現

這個委托方法沒有響應最后拼音到漢字的過程,當我發現這個問題時,問題便也差不多得到了解決。因為在之前向微博上的一個朋友咨詢時,他告訴我可以注冊這個觀察者 UITextInputCurrentInputModeDidChangeNotification

在它的監聽下可以得到中文。我剛開始時候理解錯了他的意思,以為得到的就是最終選中的漢字,而中間輸入的拼音並不會被得到。但其實這個監聽,比以上的委托方法多了最后一步而已,即從拼音到中文的過程。

所以實現的代碼如下。

<1>在init時候注冊notification:

 

<2>實現監聽方法:

<3>在dealloc里注銷掉監聽方法,切記!

 


免責聲明!

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



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