需求 輸入框限制字?jǐn)?shù)
需求下來 想?yún)⒖家恍┵Y源 結(jié)果 覺得都不太能滿足咱這需求 只能自己寫了
想了想 需求清晰 思路也就清晰了
以下是代碼
UITextRange *selectedRange = [textView markedTextRange];
//獲取高亮部分
UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
NSRange selection = textView.selectedRange;
NSInteger realLength = textView.text.length; //實際總長度
NSString *headText = [textView.text substringToIndex:selection.location]; //光標(biāo)前的文本
NSString *tailText = [textView.text substringFromIndex:selection.location];//光標(biāo)后的文本
NSInteger restLength = self.maxLength - tailText.length; //光標(biāo)后允許輸入的文本長度
if (realLength > self.maxLength) {
NSString *subHeadText = [headText substringToIndex:restLength];
textView.text = [subHeadText stringByAppendingString:tailText];
[textView setSelectedRange:NSMakeRange(restLength, 0)];
}
運行以上代碼嘗試一下 是不是覺得有問題钧排??卸留? 當(dāng)你輸中文的時候 甚至不能拼完對不對
問題是什么? 問題是字?jǐn)?shù)限制問題出現(xiàn)了 那么解決問題就顯得目標(biāo)明確得多了
同事高見 顯而易見的是當(dāng)輸入中文的時候拼音處于高亮狀態(tài)
那么 高亮字符不加入字?jǐn)?shù)限制就可以解決問題了 其實這么個判斷
//如果在變化中是高亮部分在變,就不要計算字符了
if (selectedRange && pos) {
return;
}
于是 改善后 代碼段如下
- (void)textViewDidChange:(UITextView *)textView{
UITextRange *selectedRange = [textView markedTextRange];
//獲取高亮部分
UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
//如果在變化中是高亮部分在變,就不要計算字符了
if (selectedRange && pos) {
return;
}
NSRange selection = textView.selectedRange;
NSInteger realLength = textView.text.length; //實際總長度
NSString *headText = [textView.text substringToIndex:selection.location]; //光標(biāo)前的文本
NSString *tailText = [textView.text substringFromIndex:selection.location];//光標(biāo)后的文本
NSInteger restLength = self.maxLength - tailText.length; //光標(biāo)后允許輸入的文本長度
if (realLength > self.maxLength) {
NSString *subHeadText = [headText substringToIndex:restLength];
textView.text = [subHeadText stringByAppendingString:tailText];
[textView setSelectedRange:NSMakeRange(restLength, 0)];
}
}