NSAttributedString富文本简单介绍和常用方法浅析
NSAttributedString基本知识点介绍
1、初始化方法
- (instancetype)initWithString:(NSString *)str;
- (instancetype)initWithString:(NSString *)str attributes:(nullable
NSDictionary<NSString *, id> *)attrs;
- (instancetype)initWithAttributedString:(NSAttributedString *)attrStr;
- 第一种使用字符串初始化初始化富文本
- 第二种使用字符串及属性字典(就是配置富文本的相关属性)初始化富文本
- 第三种就是用其他富文本初始化富文本
2、常用操作
- 为某一范围内文字添加某个属性
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
- 为某一范围内文字添加多个属性(两个API效果与格式一样)
- (void)addAttributes:(NSDictionary<NSString *, id> *)attrs range:(NSRange)range;- (void)setAttributes:(nullable NSDictionary<NSString *, id> *)attrs
range:(NSRange)range;
- 移除某范围内的某个属性(可与添加属性API对照,不在示例)
- (void)removeAttribute:(NSString *)name range:(NSRange)range;
- 其他部分API(见名知意,可与NSString对照不在赘述)
- (void)replaceCharactersInRange:(NSRange)range withAttributedString:
(NSAttributedString *)attrString;
- (void)insertAttributedString:(NSAttributedString *)attrString
atIndex:(NSUInteger)loc;
- (void)appendAttributedString:(NSAttributedString *)attrString;
- (void)deleteCharactersInRange:(NSRange)range;
- (void)setAttributedString:(NSAttributedString *)attrString;
3、相关可设置属性对照
通过API我们可以知道,对于富文本来说添加单个属性和添加属性字典称为其核心方法,就是一个key对应一个Value,只要能了解各种属性所对应效果就可以随意组合,搞出适合各种需求的封装API。
- NSFontAttributeName :字体字号
value值:UIFont类型 - NSParagraphStyleAttributeName : 段落样式
value值:NSParagraphStyle类型(其属性如下)- lineSpacing 行间距(具体用法可查看上面的设置行间距API)
- paragraphSpacing 段落间距
- alignment 对齐方式
- firstLineHeadIndent 指定段落开始的缩进像素
- headIndent 调整全部文字的缩进像素
- NSForegroundColorAttributeName 字体颜色
value值:UIColor类型 - NSBackgroundColorAttributeName 背景颜色
value值:UIColor类型 - NSObliquenessAttributeName 字体粗倾斜
value值:NSNumber类型 - NSExpansionAttributeName 字体加粗
value值:NSNumber类型(比例) 0就是不变 1增加一倍 - NSKernAttributeName 字间距
value值:CGFloat类型 - NSUnderlineStyleAttributeName 下划线
value值:1或0 - NSUnderlineColorAttributeName 下划线颜色
value值:UIColor类型 - NSStrikethroughStyleAttributeName 删除线
value值:1或0 - NSStrikethroughColorAttributeName 删除线颜色
value值:UIColor类型 - NSStrokeColorAttributeName 字体颜色
value值:UIColor类型 - NSStrokeWidthAttributeName 字体描边
value值:CGFloat - NSLigatureAttributeName 连笔字
value值:1或0 - NSShadowAttributeName 阴影
value值:NSShawdow类型(下面是其属性)- shadowOffset 影子与字符串的偏移量
- shadowBlurRadius 影子的模糊程度
- shadowColor 影子的颜色
- NSTextEffectAttributeName 设置文本特殊效果,目前只有图版印刷效果可用
value值:NSString类型 - NSAttachmentAttributeName 设置文本附件
value值:NSTextAttachment类型(没研究过,可自行百度研究) - NSLinkAttributeName 链接
value值:NSURL (preferred) or NSString类型 - NSBaselineOffsetAttributeName 基准线偏移
value值:NSNumber类型 - NSWritingDirectionAttributeName 文字方向 分别代表不同的文字出现方向
value值:@[@(1),@(2)] - NSVerticalGlyphFormAttributeName 水平或者竖直文本 在iOS没卵用,不支持竖版
value值:1竖直 0水平
常用需求封装
Demo讲解:
case 1:
{
//单纯改变几个字的颜色样式
_textLabel.attributedText = [AttributedStringTool ls_changeCorlorWithColor:[UIColor redColor] TotalString:@"生活如酒,或芳香,或浓烈,因为诚实,它变得醇厚;生活如歌,或高昂,或低沉,因为守信,它变得悦耳; 生活如画,或明丽,或素雅,因为诚信,它变得美丽。" SubStringArray:@[@"生活",@"或",@"因为"]];
}
break;
case 2:
{
//单纯改变字间距样式
_textLabel.attributedText = [AttributedStringTool ls_changeSpaceWithTotalString:@"用心聆听,深深呼吸,烟花雨,梨花月,寄一缕风的香魂,远离喧嚣。" Space:10.0];
}
break;
case 3:
{
//单纯改变行间距样式
_textLabel.attributedText = [AttributedStringTool ls_changeLineSpaceWithTotalString:@"一些过去,记住就好;一些回忆,收好安放,流年清浅,我只愿面朝大海春暖花开。" LineSpace:12.0];
}
break;
case 4:
{
//改变某些字颜色,并单独设置其字体大小
_textLabel.attributedText = [AttributedStringTool ls_changeFontAndColor:[UIFont systemFontOfSize:20] Color:[UIColor redColor] TotalString:@"微风乍起,迎来层层涟漪,然后又恢复最初的平静。看着荷叶下的净水,心也跟着平静。暂时会忘掉一切骚动不安,就像涟漪过后终归平静一样。" SubStringArray:@[@"平静",@"涟漪",@"微风"]];
}
break;
case 5:
{
//同时改变行间距和字间距 行间距10,字间距5
_textLabel.attributedText = [AttributedStringTool ls_changeLineAndTextSpaceWithTotalString:@"静静的,学会了一颗心去聆听,去欣赏。就如同那一湖秋水,淡淡的几许波纹,却能承载千年的日月,揽尽万里的浮云。" LineSpace:10.0 textSpace:5.0];
}
break;
case 6:
{
//将文字改为链接形式
_textLabel.attributedText = [AttributedStringTool ls_addLinkWithTotalString:@"百度www.baidu.com" SubStringArray:@[@"百度www.baidu.com"]];
}
break;
- 需求:在我们日常开发中,某些句子中会有改变某些字颜色的需求,当然颜色一般而言就是为了着重强调,常为同一种颜色,所以下面代码是单纯改变一句话中的某些字的颜色
/*** 单纯改变一句话中的某些字的颜色 ** @param color 需要改变成的颜色* @param totalStr 总的字符串* @param subArray 需要改变颜色的文字数组** @return 生成的富文本*/
+ (NSMutableAttributedString *)ls_changeCorlorWithColor:(UIColor *)color TotalString:(NSString *)totalStr
SubStringArray:(NSArray *)subArray {NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalStr];for (NSString *rangeStr in subArray) {NSRange range = [totalStr rangeOfString:rangeStr options:NSBackwardsSearch];[attributedStr addAttribute:NSForegroundColorAttributeName value:color range:range];}return attributedStr;
}
- 需求:需要更改字间距来适应整体UI
/*** 单纯改变句子的字间距(需要 <CoreText/CoreText.h>)** @param totalString 需要更改的字符串* @param space 字间距** @return 生成的富文本*/
+ (NSMutableAttributedString *)ls_changeSpaceWithTotalString:(NSString *)totalString Space:(CGFloat)space {NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];long number = space;CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);[attributedStr addAttribute:(id)kCTKernAttributeName value:(__bridge id)num range:NSMakeRange(0,[attributedStr length])];CFRelease(num);return attributedStr;
}
- 需求:需要改变行间距来适应整体UI
/*** 单纯改变段落的行间距** @param totalString 需要更改的字符串* @param lineSpace 行间距** @return 生成的富文本*/
+ (NSMutableAttributedString *)ls_changeLineSpaceWithTotalString:(NSString *)totalString LineSpace:(CGFloat)lineSpace {NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];[paragraphStyle setLineSpacing:lineSpace];[attributedStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [totalString length])];return attributedStr;
}
- 需求:同时更改行间距和字间距
/*** 同时更改行间距和字间距** @param totalString 需要改变的字符串* @param lineSpace 行间距* @param textSpace 字间距** @return 生成的富文本*/
+ (NSMutableAttributedString *)ls_changeLineAndTextSpaceWithTotalString:(NSString *)totalString LineSpace:(CGFloat)lineSpace
textSpace:(CGFloat)textSpace {NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];[paragraphStyle setLineSpacing:lineSpace];[attributedStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [totalString length])];long number = textSpace;CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);[attributedStr addAttribute:(id)kCTKernAttributeName value:(__bridge id)num range:NSMakeRange(0,[attributedStr length])];CFRelease(num);return attributedStr;
}
- 需求:更改某些文字的颜色并修改其字体,突出重点强调
/*** 改变某些文字的颜色 并单独设置其字体** @param font 设置的字体* @param color 颜色* @param totalString 总的字符串* @param subArray 想要变色的字符数组** @return 生成的富文本*/
+ (NSMutableAttributedString *)ls_changeFontAndColor:(UIFont *)font Color:(UIColor *)color TotalString:(NSString *)totalStringSubStringArray:(NSArray *)subArray {NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];for (NSString *rangeStr in subArray) {NSRange range = [totalString rangeOfString:rangeStr options:NSBackwardsSearch];[attributedStr addAttribute:NSForegroundColorAttributeName value:color range:range];[attributedStr addAttribute:NSFontAttributeName value:font range:range];}return attributedStr;
}
效果图:
源码下载:http://download.csdn.net/detail/hbblzjy/9585735
NSAttributedString富文本简单介绍和常用方法浅析相关推荐
- 【Qt】控件——QPlainTextEdit使用简单介绍:常用方法及信号、逐行读取编辑框的内容、使用自带的快捷菜单、作为日志显示窗口
Qt控件-QPlainTextEdit使用 参考链接: https://blog.csdn.net/seniorwizard/article/details/109726147; https://bl ...
- 【转】iphone开发中NSMutableAttributedString/NSAttributedString 富文本设置
http://stackoverflow.com/questions/11031623/how-can-i-use-attributedtext-in-uilabel 一.设置UILabel的属性at ...
- tinymce 富文本简单使用
tinymce.init({ //选择器 selector:'textarea', //配置顶部的菜单栏显示隐藏 menubar: false, //配置中文(默认没有中文包,需要到官网下载,放到la ...
- iOS开发 UILabel 详细介绍(属性+富文本)
UILabel是iOS开发中最常用的一种标签了,在开发过程中,会用到各种个样的标签属性,一段文字中变颜色或者字体的样式等(这些都是富文本中的内容,用于美化文字),下面就让我来给大家做一个详细的UILa ...
- Qt开发技术:Qt富文本(一)富文本介绍、文档结构
若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...
- 商家后台-商品录入【商品介绍】、富文本编辑器
1.1 需求分析 实现商品介绍的录入,要求使用富文本编辑器. 1.2 富文本编辑器介绍 富文本编辑器,Rich Text Editor,简称RTE,它提供类似于Microsoft Word 的编辑功能 ...
- 【JavaWeb】之富文本编辑器
[JavaWeb]富文本编辑器 前言 一.富文本编辑器介绍 二.富文本编辑器使用 1.引入编辑器(多种引入方式) 2.使用编辑器 三.主流富文本编辑器推荐 1.TinyMCE 2.CKEditor 3 ...
- 「后端小伙伴来学前端了」Vue集成 Element-tiptap 富文本编辑器,实现气泡菜单,划词弹出菜单
冬日暖阳 前言 今天在写前端的时候,就是遇到一个问题.一开始我以为用textarea去掉角标,实现自动增长,然后就可以了.谁知道它还得加样式,加粗.斜体,老师在最开始给的设计稿上根本没有.直接麻掉. ...
- UILabel 使用 标签,圆角,富文本
2019独角兽企业重金招聘Python工程师标准>>> 继承关系:UIView : UIResponder : NSObject ///UILabel 显示的文本只读,无法编辑,可以 ...
最新文章
- 【OpenCV学习】XML的读写
- AMDF换成ACF和AMDF合作算法
- 排序算法之计数排序、基数排序和桶排序
- 教学思路SQL之预备课程学习 建库、建表、建约束、关系、部分T-sql语句
- window-memcache技术随笔
- 前端学习(2319):angular2概述
- Python数据可视化实战——iris数据集可视化
- 封装 电流密度 重布线_具有周边硅通孔的晶圆级芯片封装有限元分析
- Java NIO学习篇之通道FileChannel详解
- foo bar的意思
- 反编译工具reflector破解方法
- Ubuntu系列硬盘安装
- 2.1.0 Python初识面向对象
- 【STC单片机学习】第八课:单片机的LED点阵
- 【Vue项目实践】实现在线预览word文件、excel文件
- 帝国cms 自动生成html,帝国cms实现用户访问页面自动生成html的方法
- 计算机科学与技术专业读书笔记300字,计算机读书笔记.doc
- 三年经验的程序员,为什么能力要强过80%的人
- 第一次玩switch,需不需要再买一个任天堂Pro手柄
- 让你重拾信心的单片机入门,小哥带你了解
热门文章
- js如何发送ajax请求,js 发送ajax请求(XMLHttpRequest)
- 大学生如何白嫖并使用腾讯云mysql云数据库
- const int INF=0x3f3f3f3f;——ACM中的无穷大常量
- 微观经济学案例分析(七)
- mPEG2000-Benzaldehyde,苯甲醛修饰的PEG,mPEG2000-DF,Benzaldehyde-mPEG
- mPEG-DF,甲氧基-聚乙二醇-苯甲醛,mPEG-Benzaldehyde,DF-mPEG
- u88财富快车流氓软件RK驱动分析
- c++ std::set集合具体使用
- 康耐视VisionPro使用VB.net构建程序(1)
- C 语言版stl: CSTL