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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月17日 15时28分16秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
5.3 使用SQLite数据库
2019-04-27
5.4 使用PostgreSQL数据库
2019-04-27
5.5 使用beedb库进行ORM开发
2019-04-27
5.6 NOSQL数据库操作
2019-04-27
第六章 session和数据存储
2019-04-27
6.1 session和cookie
2019-04-27
6.2 Go如何使用session
2019-04-27
7.5 文件操作
2019-04-27
12.4 备份和恢复
2019-04-27
第十三章 如何设计一个Web框架
2019-04-27
13.1 项目规划
2019-04-27
13.2 自定义路由器设计
2019-04-27
13.3 controller设计
2019-04-27
13.4 日志和配置设计
2019-04-27
13.5 实现博客的增删改
2019-04-27
第十四章 扩展Web框架
2019-04-27
Go语言教程拓展基础篇 (查漏补缺, 献给初学者)
2019-04-27
14.1 静态文件支持
2019-04-27
OS X v10.8 to OS X v10.9 API 差异
2019-04-27
cocos2dx多线程以及线程同步 与 cocos2dx内存管理与多线程问题
2019-04-27