- (void)textFieldEditChanged:(UITextField *)textField
{
NSString *lang = [[UIApplication sharedApplication] textInputMode].primaryLanguage;// 键盘输入模式
if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textField markedTextRange];
//获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
[self handleTextFieldCharLength:textField];
}
}
// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
else{
[self handleTextFieldCharLength:textField];
}
}
1.保证emoji输入小于要求的长度
/**
处理textField文本的长度
*/
- (void)handleTextFieldCharLength:(UITextField *)textField
{
NSString *toBeString = textField.text;
NSString *str =[toBeString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
if (str.length > WordsNumber) {
__block NSRange subrange;
[textField.text enumerateSubstringsInRange:NSMakeRange(0, toBeString.length) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop)
{
subrange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, str.length-substringRange.length)];
}];
NSString * result = [toBeString substringWithRange:subrange];
textField.text = result;
}
}
2.按照一个emoji长度为1,显示输入的文字字数。
/**
处理textField文本的长度
*/
- (void)handleTextFieldCharLength:(UITextField *)textField
{
NSString *str = textField.text;
NSUInteger charTotal = [self countCharacterLength:str];
if (charTotal > WordsNumber) {
NSMutableArray *characters = [NSMutableArray array];
[textField.text enumerateSubstringsInRange:NSMakeRange(0, str.length) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
if (characters.count < WordsNumber) {
[characters addObject:substring];
}
else{
*stop = true;
}
}];
NSString *resultStr = [characters componentsJoinedByString:@""];
NSUInteger subCharTotal = [self countCharacterLength:resultStr];
textField.text = resultStr;
_wordsNum.text=[NSString stringWithFormat:@"%lu",WordsNumber-subCharTotal];
}
else{
_wordsNum.text=[NSString stringWithFormat:@"%lu",WordsNumber-charTotal];
}
}
/**
计算输入的字符长度
*/
- (NSUInteger)countCharacterLength:(NSString *)test
{
__block NSUInteger total = 0;
[test enumerateSubstringsInRange:NSMakeRange(0, test.length) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
total++;
}];
DDLogInfo(@"当前输入字符总数%lu",(unsigned long)total);
return total;
}
Emoji参考资料:
1.iOS 对于表情符号 emoji被截断问题
https://blog.csdn.net/bug_delete/article/details/90694630
2.深入理解Emoji(一) —— 字符集,字符集编码
https://www.jianshu.com/p/ca191d9bdcc0
3.深入理解Emoji(二) —— 字节序和BOM
https://www.jianshu.com/p/ca191d9bdcc0
4.深入理解Emoji(三) —— Emoji详解
https://juejin.im/post/5c00b31a5188251d9e0c4a59
网友评论