标签:inpu 高亮 sele ted marked ima lang alert 直接
经常做,经常忘,记下来,以后好直接拷贝。
开始使用如下方法做限制
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if ([text isEqualToString:@""] && range.length > 0) { //删除字符肯定是安全的 return YES; } else { if (textView.text.length - range.length + text.length > 300) { [FXAlertTool alertWithMessage:@"超出字数限制" target:self]; return NO; } else { return YES; } } }
问题是使用中文输入法,最后一个字不能输入,总是提示超出字数限制,因为输入拼音的时候就开始计算文本长度。所以做了优化,以下方法可以直接拷贝粘贴使用。注意:没有处理表情!
- (void)textViewDidChange:(UITextView *)textView { int maxLimit = 300; NSString *lang = [[textView textInputMode] primaryLanguage]; // 键盘输入模式 if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写 UITextRange *selectedRange = [textView markedTextRange]; //获取高亮部分 UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0]; // 没有高亮选择的字,则对已输入的文字进行字数统计和限制 if (!position) { if (textView.text.length > maxLimit) { textView.text = [textView.text substringToIndex:maxLimit]; [FXAlertTool alertWithMessage:@"超出字数限制" target:self]; } } else { // 有高亮选择的字符串,则暂不对文字进行统计和限制 } } else { // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况 if (textView.text.length > maxLimit) { textView.text = [textView.text substringToIndex:maxLimit]; [FXAlertTool alertWithMessage:@"超出字数限制" target:self]; } } } - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { int maxLimit = 300; if ([self isText:textView beyondLimit:maxLimit] && [text length] > 0) { return NO; } return YES; } - (BOOL)isText:(UITextView *)tv beyondLimit:(int)maxLimit{ NSString *lang = [[tv textInputMode] primaryLanguage]; if ([lang isEqualToString:@"zh-Hans"]) { UITextRange *selectedRange = [tv markedTextRange]; UITextPosition *position = [tv positionFromPosition:selectedRange.start offset:0]; if (!position) { if (tv.text.length > maxLimit) { return YES; } } } else { if (tv.text.length > maxLimit) { return YES; } } return NO; }
标签:inpu 高亮 sele ted marked ima lang alert 直接
原文地址:https://www.cnblogs.com/6duxz/p/9007269.html