国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS中textField限制字符串長度、字符數的方法

2019-10-21 18:40:56
字體:
來源:轉載
供稿:網友

前言

最近在開發的時候遇到一個問題,就是需要限制TextField中輸入的字符串的長度,但是不是直接根據長度限制,而是根據字符數限制,一個漢字為兩個字節,數字字母為一個字符。超過字符限制則不允許繼續輸入并彈出toast提示。

這個問題有三個關鍵點:判斷字符串是否超出長度,超出長度不可輸入,判斷字符串的字符數。

下面話不多說了,來一起看看詳細的介紹吧

方法如下:

1、判斷字符串是否超出長度

[self.txfUsername addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; - (void)textFieldDidChange:(id)sender{ if (self.textField.text.length > MAXLENGTH) // MAXLENGTH為最大字數 { //超出限制字數時所要做的事 }}

為什么在這里要自己監聽textField中文字的變化,而不直接使用textField的代理方法-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 

因為這個方法在中文書輸入法下,只能輸入一個詞的情況,如果聯想詞是兩個詞,也可以輸入。所以會出現誤差。直接監聽UIControlEventEditingChanged 是最靠譜的。

2、超出長度不可輸入

if (self.textField.text.length > MAXLENGTH) // MAXLENGTH為最大字數 { self.textField.text = [self.txfUsername.text substringToIndex: MAXLENGTH]; // MAXLENGTH為最大字數 }

如果超出長度,永遠把前MAXLENGTH的子字符串賦給textField的text,即textField永遠只顯示前MAXLENGTH個字,視覺效果就是無法繼續輸入。

3、前面所有用到的MAXLENGTH均為字符串長度,不論數字字母還是漢字,最后要解決的問題就是判斷字符數。

//按照中文兩個字符,英文數字一個字符計算字符數-(NSUInteger) unicodeLengthOfString: (NSString *) text { NSUInteger asciiLength = 0; for (NSUInteger i = 0; i < text.length; i++) { unichar uc = [text characterAtIndex: i]; asciiLength += isascii(uc) ? 1 : 2; } return asciiLength;}

NSUInteger lenOfBytes = [text lengthOfBytesUsingEncoding:NSUTF8StringEncoding];也試過,lengthOfBytesUsingEncoding就是按照編碼返回字節數,但是NSUTF8StringEncoding是按照英文一個字符,中文三個字符來編碼的,NSUnicodeStringEncoding是按照英文數字漢字都是兩個字符編碼的,目前iOS中的編碼方法都和需求不符,所以需要另外做計算。

因為自己對字符編碼不了解,所以沒有想到正確的辦法。這個方法是在網上找了好久才找到。來源ymonke。但是在使用過程中發現返回值有問題,于是做了修改,結果如上代碼。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 游戏| 成都市| 祥云县| 余庆县| 昆明市| 肥西县| 崇义县| 沙河市| 青田县| 泗水县| 昌都县| 永仁县| 汶上县| 庆元县| 新晃| 扎鲁特旗| 黄大仙区| 易门县| 称多县| 武陟县| 太仆寺旗| 阿尔山市| 寿光市| 托里县| 民勤县| 光山县| 万州区| 阜平县| 泸溪县| 涟源市| 襄樊市| 若尔盖县| 陈巴尔虎旗| 任丘市| 嘉禾县| 枣庄市| 兴隆县| 海阳市| 凭祥市| 泽库县| 宜阳县|