需求:
textfield中限制输入字数,不管是中文还是英文,或者中英文混合,总数限制15个,对输入的汉字或英文字符都要求很精确,尝试了好几种办法,如果只输入中文,或者只输入英文,用普通的完全没有问题,但是如果是中英文混合,就计算不准了。
上网搜了下面的这种办法,实践之后完全没有问题,在此记录一下,忘记原文在哪看的了,如有侵权请联系我。首先在viewDidload中添加下面的通知,监听textfield编辑时的变化
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFiledEditChanged:) name:UITextFieldTextDidChangeNotification object:textFields];
- 实现textfield编辑的时候调用的方法,当达到最大限制之后,之后输入的文字就不显示,只截取需要的数量。
- (void)textFiledEditChanged:(NSNotification *)notification {
UITextField *textFieldtest = (UITextField *)notification.object;
NSString *toBeString = textFieldtest.text;
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式
if([lang isEqualToString:@"zh-Hans"]) { //简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textFieldtest markedTextRange];
//获取高亮部分
UITextPosition *position = [textFieldtest positionFromPosition:selectedRange.start offset:0];
//没有高亮选择的字,则对已输入的文字进行字数统计和限制
if(!position) {
if(toBeString.length > 15) {
textFieldtest.text = [toBeString substringToIndex:15];
}
}
}
else if ([lang isEqualToString:@"en-US"]) {
UITextRange *selectedRange = [textFieldtest markedTextRange];
UITextPosition *position = [textFieldtest positionFromPosition:selectedRange.start offset:0];
if(!position) {
if(toBeString.length > 32) {
textFieldtest.text = [toBeString substringToIndex:32];
}
}
}
text2 = textFieldtest.text;
}
- 最后别忘了在dealloc 中移除通知。
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:textFields];
}