一、需求:
1、限制输入TextField输入上限为18字(数字、汉字、英文都按一个字计算、表情按2字计算、等同于string.length);
2、到达输入上限后或复制大段文字后截取前18字;
二、代码
1、给textField添加监听方法。
[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
2、处理textFieldDidChangd:
NSString *toBeString = textField.text;
if (![textField markedTextRange]) { //判断是否输入完成状态
if (toBeString.length > 18) {
textField.text = [toBeString ds_subStringLength:kMaxLength];
}
}
3、字符串截取的处理,发现最后一个字符串是表情时使用系统方法截取字符串后出现乱码;自定义了一个截取字符串的方法;
- (NSString *)ds_subStringLength:(NSUInteger)length{
NSInteger subLength = 0;
NSRange range;
for (int i = 0; i < self.length;i+= range.length) {
range = [self rangeOfComposedCharacterSequenceAtIndex:i];// 获取当前位置字符的的区间
NSString *str = [self substringWithRange:range];
subLength += range.length;
if (subLength > length) {
return [self substringToIndex:i];
}
}
return nil;
}