iOS UITextView设置富文本不能输入中文问题
发布日期:2022-04-05 00:52:16 浏览次数:3 分类:博客文章

本文共 2409 字,大约阅读时间需要 8 分钟。

项目中我们会经常使用UITextView输入文本,正常使用比较简单,但往往设计的妹子会提出调个行间距呀之类的问题,此刻我们就不得不设置富文本来实现这个效果,下面就简述下我的采坑之路。

其实最重要的就是要知道中文输入情况下有没有候选字符

主要是使用markedTextRang这个属性,markedTextRange不等于空时表示有候选字符,等于空表示没有候选字符

@property (nullable, nonatomic, readonly) UITextRange *markedTextRange; // Nil if no marked text.

话不多说直接上代码

#pragma mark - UITextViewDelegate- (void)textViewDidChange:(UITextView *)textView {        CGFloat maxLength = 2000;    NSString *toBeString = textView.text;    // markedTextRange不等于空时表示有候选字符,等于空表示没有候选字符    //获取高亮部分    UITextRange *selectedRange = [textView markedTextRange];    UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];    if (!position || !selectedRange) {        if (toBeString.length > maxLength) {            NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:maxLength];            if (rangeIndex.length == 1) {                textView.text = [toBeString substringToIndex:maxLength];            } else {                NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, maxLength)];                textView.text = [toBeString substringWithRange:rangeRange];            }        }                //        替换富文本(此时已无候选字符,用户已确定输入内容)        NSMutableAttributedString *resutlAtt = [ICKRegularTool setTextStrWithContentStr:textView.text normalFont:FF_PFR_ICOME(16) normalColor:XZWL_COLOR_333333 lineSpacing:5];        textView.attributedText = resutlAtt;            }        //    替换富文本 写在这里会不能输入中文 因为还有候选字符(就是用户还没有确定输入的内容)//    NSMutableAttributedString *resutlAtt = [ICKRegularTool setTextStrWithContentStr:textView.text normalFont:FF_PFR_ICOME(16) normalColor:XZWL_COLOR_333333 lineSpacing:5];//    textView.attributedText = resutlAtt;        float textViewHeight = [textView sizeThatFits:CGSizeMake(textView.frame.size.width, MAXFLOAT)].height;        CGRect frame = textView.frame;    frame.size.height = textViewHeight;    textView.frame = frame;        if(textView.text.length == 0){//显示占位文字        self.textViewPlaceLabel.hidden = NO;    }else{        self.textViewPlaceLabel.hidden = YES;    }        if([self.delegate respondsToSelector:@selector(carrerCircleTaskDesCellReloadTableviewForIndex:)]){                [self.delegate carrerCircleTaskDesCellReloadTableviewForIndex:_indexPath];    }        _iCKCreateFullTaskModel.taskName = ObjErrorCheck([textView.text stringDeleteEndsWhiteSpace]);    }

 

转载地址:https://www.cnblogs.com/lijianyi/p/14068434.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:解决npm ERR! code ELIFECYCLE(watchman相关错误)
下一篇:iOS UIScrollView滚动方法对比

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月17日 15时28分16秒