- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSInteger textLength = 0;
UITextRange *selectedRange = [textField markedTextRange];//获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
if (!position) {
textLength = [Utils getStringAsciiLength:textField.text];
}
if (string.length > 0) {//输入状态
if (textField.text.length > range.location) { //候选词替换高亮拼音时
NSString *newStr = [NSString stringWithFormat:@"%@%@",[textField.text substringToIndex:range.location],
string];
textLength = [Utils getStringAsciiLength:newStr];
}else {
textLength += [Utils getStringAsciiLength:string];
}
}else {//删除状态
if (textField.text.length > 0) {
textLength = [Utils getStringAsciiLength:[textField.text substringToIndex:range.location]];
}
}
if (textLength > maxStrLength) {//如果输入的字符长度超过限制长度,则进行截取
if (textField.text.length >= range.location) {
textField.text = [NSString stringWithFormat:@"%@%@",[textField.text substringToIndex:range.location],string];
}
textField.text = [Utils subStringByAsciiLength:textField.text withLength:maxStrLength];
return NO;
}
return YES;
}
PS:Utils类的getStringAsciiLength:(NSString *)str方法根据字符串的编码或者字符串占用字符数