iOS textView限制文字输入(完整版)

解决的问题:
1.截断汉字对中文输入不友好的问题(比如要输入最后一个汉字“哈”,输入字母h之后就不让你输入了。注:在系统自带键盘中文会出现这个问题)
2.我已经输入满了,此时光标放在文字中间,再输入就会顶掉后面的字。需求当然是删掉你正在输入的字,已完美解决。
#pragma mark - Protocol conformance
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if ([text isEqualToString:@"\n"]) { // 输入回车
        [textView resignFirstResponder];
        return NO;
    }
    return YES;
}

- (void)textViewDidChange:(UITextView *)textView {
    self.placeholderLabel.hidden = textView.hasText;

    UITextRange *selectedRange = [textView markedTextRange];
    // 获取高亮部分 中文联想
    UITextPosition *posi = [textView positionFromPosition:selectedRange.start offset:0];

    // 如果在变化中是高亮部分在变,就不要计算字符
    if (selectedRange && posi) {
        return;
    }

    // 实际总长度
    NSInteger realLength = textView.text.length;
    NSRange selection = textView.selectedRange;
    NSString *headText = [textView.text substringToIndex:selection.location];   // 光标前的文本
    NSString *tailText = [textView.text substringFromIndex:selection.location]; // 光标后的文本
    NSInteger restLength = self.limitNum - tailText.length;                     // 光标前允许输入的最大数量

    if (realLength > self.limitNum) {
        // 解决半个emoji 定位到index位置时,返回在此位置的完整字符的range
        NSRange range = [textView.text rangeOfComposedCharacterSequenceAtIndex:restLength];
        NSString *subHeadText = [textView.text substringToIndex:range.location];
        
        // NSString *subHeadText = [headText substringToIndex:restLength];
        textView.text = [subHeadText stringByAppendingString:tailText];
        [textView setSelectedRange:NSMakeRange(restLength, 0)];
        // 解决粘贴过多之后,撤销粘贴 崩溃问题 —— 不会出现弹框
        [textView.undoManager removeAllActions];
    }
    self.textNumLabel.text = [NSString stringWithFormat:@"%ld/%ld", textView.text.length, self.limitNum];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,710评论 4 61
  • 孙局长也是我的高中同学。 我、老万、王总和孙局长是高中文科班的同班同学。老万和孙局长更近一些,离家远,都住校。男生...
    苍山暮雪阅读 3,602评论 7 7
  • 刘爱国阅读 1,279评论 0 0
  • 每天请你学会去感恩金钱,感恩你已经有了一切。你的实物,你的早餐,你呼吸的每一口空气,你的交通工具,包括你的健康,你...
    七色花园阅读 2,823评论 0 1

友情链接更多精彩内容