完美限制UITextField的輸入長度

2021-08-15 21:57:46 字數 2246 閱讀 1854

要限制乙個uitextfield的輸入字數,很多人首先想到的是通過uitextfielddelegate

下面這個**方法實現:

- (bool)textfield:(uitextfield *)textfield shouldchangecharactersinrange:(nsrange)range replacementstring:(nsstring *)string;//return no to not change text

例如要設定字數限制為10:

- (bool)textfield:(uitextfield *)textfield shouldchangecharactersinrange:(nsrange)range replacementstring:(nsstring *)string

return yes;

}此列的缺點:

1、此時要新增到textfield的文字並未寫入textfield,我們判斷的是已經輸入的文字是否超過10個,如果輸入了9個,然而最後一次直接拼音出來好幾個字,此時也是可以輸入的,所以range和string引數是一定要使用的,range說明文字要插入的文字將要放置的位置,string為將要插入的字串。  

2、聯想詞的輸入不通知此**函式,所以如果通過聯想詞輸入的話,想輸入多少文字都可以  

3、輸入超過10個字之後退格鍵不能用

4、當使用拼音輸入法時,該委託方法中的最後乙個引數string接受的是輸入的字母,而不是選擇的漢字,造成的結果是,當想輸入文字「我在程式設計」,輸入拼音「wozaibiancheng」,每輸入乙個字母便會進入委託方法,統計的字元長度是字母的長度,實際上漢字還未超過限制長度,但是字母的長度超過了導致無法繼續輸入。而且,致命的是,這個委託方法並不響應,選中候選漢字的過程即這個委託方法沒有響應最後拼音到漢字的過程),這就沒有辦法重新修正字元長度的統計了。

- (bool)textfield:(uitextfield *)textfield shouldchangecharactersinrange:(nsrange)range replacementstring:(nsstring *)string

return yes;

}此列的缺點:

1、聯想詞的輸入不通知此**函式,所以如果通過聯想詞輸入的話,想輸入多少文字都可以  

2、輸入超過10個字之後退格鍵不能用

3、當使用拼音輸入法時,該委託方法中的最後乙個引數string接受的是輸入的字母,而不是選擇的漢字,造成的結果是,當想輸入文字「我在程式設計」,輸入拼音「wozaibiancheng」,每輸入乙個字母便會進入委託方法,統計的字元長度是字母的長度,實際上漢字還未超過限制長度,但是字母的長度超過了導致無法繼續輸入。而且,致命的是,這個委託方法並不響應,選中候選漢字的過程(即這個委託方法沒有響應最後拼音到漢字的過程),這就沒有辦法重新修正字元長度的統計了。

對於聯想詞的問題,我們還可以通過-(void)textfielddidendediting:(uitextfield *)textfield;**方法

在結束編輯的時候把文字截斷,但是使用者體驗很差,因為使用者會看到輸入的文字在輸入完成時突然少了幾個。此時希望有類似-(void)textfielddidchange:(uitextfield *)textfield的**方法,但可惜沒有。不過天無絕人之路,uitextfield有uikit_extern nsstring *const uitextfieldtextdidchangenotification這個訊息通知(切記,監聽訊息還要記得解除監聽),

uitextfield

本身提供了相應的事件監聽:

[textfield addtarget:self action:@selector(textfielddidchange:) forcontrolevents:uicontroleventeditingchanged];

這樣就可以更好地限制輸入長度:

- (void)textfielddidchange:(uitextfield *)textfield}}

此列的缺點:

1、對於純字元的統計沒有什麼問題,但是,當使用拼音輸入法時,該方法中的最後乙個引數string接受的是輸入的字母,而不是選擇的漢字,造成的結果是,當想輸入文字「我在程式設計」,輸入拼音「wozaibiancheng」,每輸入乙個字母便會進入方法,統計的字元長度是字母的長度,實際上漢字還未超過限制長度,但是字母的長度超過了導致無法繼續輸入。

解決辦法如下:

- (void) 

textfielddidchange

:(uitextfield *)textfield

}else

}else}}

完美限制UITextField的輸入長度

要限制乙個uitextfield的輸入字數,很多人首先想到的是通過uitextfielddelegate 下面這個 方法實現 bool textfield uitextfield textfield shouldchangecharactersinrange nsrange range replac...

Swift 限制UITextField字數的方法

首先利用uitextfield的addtarget方法,監聽uitextfield的文字變化 textfield.addtarget self,action textdidchange forcontrolevents uicontrolevents.editingchanged 然後實現textd...

UITextField限制輸入長度

因leader要求輸入長度做限制,而且要求乙個漢字算2個字元,其他的算1個字元,再加上乙個controller有多個uitextfiled,所以我這麼寫控制長度。也許會有更好的方法 m檔案 import viewcontroller.h inte ce viewcontroller end impl...