原贴出处: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
欢迎拍砖。。。��