一、需求:
1、限制輸入TextField輸入上限為18字(數(shù)字、漢字、英文都按一個(gè)字計(jì)算、表情按2字計(jì)算、等同于string.length);
2、到達(dá)輸入上限后或復(fù)制大段文字后截取前18字;
二、代碼
1、給textField添加監(jiān)聽方法。
[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
2、處理textFieldDidChangd:
NSString *toBeString = textField.text;
if (![textField markedTextRange]) { //判斷是否輸入完成狀態(tài)
if (toBeString.length > 18) {
textField.text = [toBeString ds_subStringLength:kMaxLength];
}
}
3、字符串截取的處理,發(fā)現(xiàn)最后一個(gè)字符串是表情時(shí)使用系統(tǒng)方法截取字符串后出現(xiàn)亂碼;自定義了一個(gè)截取字符串的方法;
- (NSString *)ds_subStringLength:(NSUInteger)length{
NSInteger subLength = 0;
NSRange range;
for (int i = 0; i < self.length;i+= range.length) {
range = [self rangeOfComposedCharacterSequenceAtIndex:i];// 獲取當(dāng)前位置字符的的區(qū)間
NSString *str = [self substringWithRange:range];
subLength += range.length;
if (subLength > length) {
return [self substringToIndex:i];
}
}
return nil;
}