TextField 限制字數(shù)的方法
代理限制字數(shù)
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
用這個方法來進行字數(shù)限制,但是這個方法到現(xiàn)在也不能限制中文,這個方法給我最多的就是用在做限制手機號碼等純數(shù)字或者密碼輸入等數(shù)字英文字符的限制??通知
在viewdidload注冊一個通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldEditChanged:) name:UITextFieldTextDidChangeNotification object:_textField.text];
- 往textfield添加一個Target
[_textField addTarget:self action:@selector(textFieldEditChanged:) forControlEvents:UIControlEventEditingChanged];
- 就上面三種方法而言,我個人會使用第三種方法,理由嘛就是能不用通知就不用通知
下面來說具體方法
NSInteger length;//定義length來保存字數(shù)
-(void)textFieldEditChanged:(UITextField *)textField
{
//字數(shù)限制
NSInteger WordCount = 10;
NSString *toBeString = textField.text;
UITextRange *selectedRange = [textField markedTextRange];
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
// 沒有高亮選擇的字,則對已輸入的文字進行字數(shù)統(tǒng)計和限制
if (!position)
{
if (toBeString.length > WordCount && textField.markedTextRange == nil)
{
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:WordCount];
if (rangeIndex.length == 1)
{
textField.text = [toBeString substringToIndex:WordCount];
}
else
{
textField.text = [toBeString substringWithRange:NSMakeRange(0, length)];
}
} else {
length = toBeString.length;
}
}
}
總結(jié)
現(xiàn)在對于字數(shù)限制,我是比較推薦使用我現(xiàn)在用的這種,符合中文的需求
之前其實并沒有寫那么復雜,只是寫了如果大于字數(shù)限制,就直接切割多少個字符限制的字符串
后來因為發(fā)現(xiàn)表情會占用兩個字節(jié),如果你最后剛好9個,多一個表情就會變成11,切割變成了10,就會照成表情的不完整,會出現(xiàn)比較嚴重的bug,在網(wǎng)上綜合例子弄了自己最適合的,或許有更好的,歡迎拍磚~
雖然覺得自己學的不好,但也是慢慢累積,希望有一天能夠幫助到別人,不能一味的總是獲取別人的成果.