iOS UITextfield中文状态下字数统计问题

在UITextfield中输入标题,当输入中文时要限制输入内容的长度,发现在代理方法中总是计算错误。查文档发现如下方法可以解决,特记录下来,也为遇到同样问题的人提供参考.

UITextfield 在中文状态下统计输入时,如果使用系统的输入法或者其他的一些第三方的输入法时,系统会先将输入的字母输入到输入框中,导致我们在做输入字数限制时会将输入的字母的长度也计算进去,导致长度计算不准。可以采用如下方法,避免上述问题.

1.注册UITextFieldTextDidChangeNotification通知的观察者;

[[NSNotificationCenter defaultCenter] addObserver:self selector(textChange name:UITextFieldTextDidChangeNotification object:nil];

2.实现textChange:方法,所有的判断操作将会在改方法中操作;

- (void)textChangeNSNotification *)notify {

if([notify.name isEqualToString:UITextFieldTextDidChangeNotification]) {

SKTextField *textField = (SKTextField *)notify.object;

UITextRange *range = textField.markedTextRange;//获取输入框中高亮的部分

if(range) {

}else{

NSUInteger length = textField.text.length;

}

}

}

其中 length 即为已经输入的中文字符的长度。

以下是代码部分,请参考:

iOS UITextfield中文状态下字数统计问题_第1张图片

在textChange: 方法中,先是获取输入中高亮的部分,即计算长度时不计算在内的区域。然后判断该区域是否存在,如果存在,则说明在中文输入时输入框中还未进行替换的汉字,则不进行长的计算。如果存在,则说明替换操作已经发生过,此时计算的长度即为正确的长度.

当然还有一种跟简单的方法,待下次再分享给大家...

你可能感兴趣的:(iOS UITextfield中文状态下字数统计问题)