在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 即为已经输入的中文字符的长度。
以下是代码部分,请参考:
在textChange: 方法中,先是获取输入中高亮的部分,即计算长度时不计算在内的区域。然后判断该区域是否存在,如果存在,则说明在中文输入时输入框中还未进行替换的汉字,则不进行长的计算。如果存在,则说明替换操作已经发生过,此时计算的长度即为正确的长度.
当然还有一种跟简单的方法,待下次再分享给大家...