iOS UITextView 限制字數(解決了截斷輸入聯想和對系統鍵盤中文不友好的問題)
阿新 • • 發佈:2019-01-25
原貼出處:http://blog.csdn.net/z794614061/article/details/53821798
個人認為是目前最好的截斷方式!
解決的問題有:
1.截斷漢字對中文輸入不友好的問題(比如要輸入最後一個漢字“講”,輸入字母j之後就不讓你輸入了。注:在系統自帶鍵盤中文會出現這個問題)
2.我已經輸入滿了,此時游標放在文字中間,再輸入就會頂掉後面的字。需求當然是刪掉你正在輸入的字,已完美解決。
需求 輸入框限制字數
需求下來 想參考一些資源 結果 覺得都不太能滿足咱產品這需求 只能自己寫了
想了想 需求清晰 思路也就清晰了
以下是程式碼
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]; //游標前的文字
NSString *tailText = [textView.text substringFromIndex:selection.location];//游標後的文字
NSInteger restLength = self.maxLength - tailText.length; //游標後允許輸入的文字長度
if (realLength > self.maxLength) {
NSString *subHeadText = [headText substringToIndex:restLength];
textView.text = [subHeadText stringByAppendingString:tailText];
[textView setSelectedRange:NSMakeRange(restLength, 0 )];
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
執行以上程式碼嘗試一下 是不是覺得有問題??? 當你輸中文的時候 甚至不能拼完對不對
問題是什麼? 問題是字數限制問題出現了 那麼解決問題就顯得目標明確得多了
同事高見 顯而易見的是當輸入中文的時候拼音處於高亮狀態
那麼 高亮字元不加入字數限制就可以解決問題了 其實這麼個判斷
//如果在變化中是高亮部分在變,就不要計算字元了
if (selectedRange && pos) {
return;
}
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
於是 改善後 程式碼段如下
- (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]; //游標前的文字
NSString *tailText = [textView.text substringFromIndex:selection.location];//游標後的文字
NSInteger restLength = self.maxLength - tailText.length; //游標後允許輸入的文字長度
if (realLength > self.maxLength) {
NSString *subHeadText = [headText substringToIndex:restLength];
textView.text = [subHeadText stringByAppendingString:tailText];
[textView setSelectedRange:NSMakeRange(restLength, 0)];
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
歡迎拍磚。。。��