一般思路 对于文本输入框如果要限制输入长度,一般判断一下当前长度 如果长度大于固定长度就限制无法输入,在ios上由于存在中英文键盘的输入,要做到固定长度输入 稍显复杂些 ,下面是我的方法,应该会有更好的,有待优化
实现的主体方法 UITextView的回调
- (
BOOL
)textView:(
UITextView
*)textView shouldChangeTextInRange:(
NSRange
)range replacementText:(
NSString
*)text
首先我们要了解 回调的这个函数 都会给我们什么
textview 当前textview中的内容
range 当前textview的location 如果输入length为0 删除length为1
text 我们输入的内容
问题点
最大的问题就在于中文键盘输入中文的时候 由于在输入的每次都会激活回调方法 所以textview的length会增加,如果单独用网上的一些方法类似
if (range.location >=MaxWords)
return NO;
return YES;
这样判断会导致中文输入不完整 例如我的限制字数为10 当输入了hello 在输入中文的shijie(世界)会因为到i已经满10而无法输入。
针对这个问题
粗劣代码如下 只是个人的一个思路,例如还有中英文输入混合的情况
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage];
if ([text length]==0) {
if (self.maxWords<</span>maxWordsConst) {
self.maxWords +=1;
}
return YES;
}
else {
if ([lang isEqualToString:@"zh-Hans"]&&![text isMatchedByRegex:@"[\u4e00-\u9fa5]"]&&[textlength]==1) { //如果输入键盘为中文 并且输入的不为中文,长度为1(中文输入条上全英文) 就算达到上限也是可以输入的
return YES;
}
else{
if ([textView.text length]+[text length] > maxWordsConst){
self.maxWords = 0;
textView.text = [textView.text substringToIndex:maxWordsConst];
return NO;
}
else {
self.maxWords = maxWordsConst - ([textView.text length]+[text length]);
return YES;
}
}
}
}