iOS 开发中经常需要限制UITextView输入的字数,但是中文输入时会有一些问题,因为输入中文时有时输入的英文还没有转化为汉字的状态,如下图:
一个UITextView,限定只能输入10个字,但是用中文输入法,输入到6个就会给我自动填充为英文。例如我中文输入法输入“苹果开发”
textView shouldChangeTextInRange给我截取成“ping guo k”,我加了个侦听textViewDidChange,无法实现中文输入,是否有办法解决这个问题呢?
以下是我的解决方案代码:(实现UITextView的一个代理方法)
#pragma mark -textView输入内容改变代理方法
- (void)textViewDidChange:(UITextView *)textView{
bool isChinese;//判断是否是中文
if ([[[UIApplication sharedApplication]textInputMode].primaryLanguage isEqualToString: @"en-US"]) {
isChinese = false;
}else{
isChinese = true;
}
//要求输入最多40位字符
NSString *str = [[textView text] stringByReplacingOccurrencesOfString:@"?" withString:@""];
if (isChinese) { //中文输入法下
UITextRange *selectedRange = [textView markedTextRange];
//获取高亮部分
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
NSLog(@"输入的是汉字");
if ( str.length>=401) {
NSString *strNew = [NSString stringWithString:str];
[textView setText:[strNew substringToIndex:40]];
}
}else{
NSLog(@"英文还没有转化为汉字");
}
}else{
if ([str length]>=41) {
NSString *strNew = [NSString stringWithString:str];
[textView setText:[strNew substringToIndex:400]];
}
}
}
UITextField实现方法类似,监听UIControlEventEditingChanged事件即可