iOS對textField進行字元長度限制的辦法,iostextfield

來源:互聯網
上載者:User

iOS對textField進行字元長度限制的辦法,iostextfield

在項目開發過程中,遇到這麼一個需求,編輯標籤時,輸入的最大長度需要限制為24個位元組。

查閱了一些材料,並參考了之前項目的相關處理辦法,今天在這裡總結一下解決方案。

1.添加對UITextField的編輯變化事件的監聽:

 

[self.textField addTarget:self action:@selector(textLengthChange:) forControlEvents:UIControlEventEditingChanged];

 

2.實現對應的action:

 

-(void)textLengthChange:(id)sender{    UITextField * textField=(UITextField*)sender;    NSString * temp = textField.text;        if (textField.markedTextRange ==nil)    {        while(1)        {            if ([temp lengthOfBytesUsingEncoding:NSUTF8StringEncoding] <= kMaxByteOfAlarmName) {                break;            }            else            {                temp = [temp substringToIndex:temp.length-1];            }        }        textField.text=temp;    }}

 

說明:如果內容超長,就幹掉最後一個字,再判斷是否超過限制長度,如此迴圈,直到滿足長度限制要求。這裡注意一下,直接使用length方法,返回的字元數,而不是位元組數,lengthOfBytesUsingEncoding可返回指定字元編碼的位元組數。

另外,中文輸入時,和平時英文輸入會不太一樣,中文輸入會出現正在輸入拼音,還沒有選漢字,拼音已經上去了:

這時,拼音本身占的位元組可能大於選字後的漢字所佔的位元組,例如輸入zhong,佔5個位元組,而如果使用者選擇“中”,只佔三個位元組。如果不專門考慮這種情況,就會出現明明還可以再輸一個中文漢字,但是輸入拼音的時候沒法完成zhong的拼音輸入。所以需要判斷當時textField是否有已選中的內容。

3.針對步驟2中的圖,如果在出現圖中的狀態下直接儲存,那麼textfiled會把未轉換為漢字的拼音也一起儲存進去。所以還需要在使用textfield的內容前再進行一下處理,把超出的部分刪除:

 

-(void)repairTextField{    NSString * temp = self.textField.text;    while(1)    {        if ([temp lengthOfBytesUsingEncoding:NSUTF8StringEncoding] <= kMaxByteOfAlarmName) {            break;        }        else        {            temp = [temp substringToIndex:temp.length-1];        }    }    self.textField.text=temp;}

 

Done。如果有什麼問題,歡迎留言指出,一起討論。

 

補充點東西:

為什麼不用UITextField的代理方法shouldChangeCharactersInRange?

目前看來,此方法無法捕捉粘貼、拼音轉漢字和聯想(例如使用拼音輸“中國”後,直接再鍵盤的候選詞中可以選“萬歲”)輸入導致的變化。

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.