富文本常用封装(NSAttributedString浅析)
最近经常遇到关于富文本的一些需求,特此封装了几个最常用的API分享给大家,但授之以鱼不如授之以渔,接下来会顺便谈谈NSAttributedString,确保你读了本篇文章能够自己封装关于富文本的API,本文封装API的示例Demo再此,拿去用吧!骚年们!
一、常用需求封装
需求:在我们日常开发中,某些句子中会有改变某些字颜色的需求,当然颜色一般而言就是为了着重强调,常为同一种颜色,所以下面代码是单纯改变一句话中的某些字的颜色
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
 | 
/** *  单纯改变一句话中的某些字的颜色 * *  @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
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
 | 
/** *  单纯改变句子的字间距(需要 <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;}</coretext> | 
需求:需要改变行间距来适应整体UI
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
 | 
/** *  单纯改变段落的行间距 * *  @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;} | 
需求:同时更改行间距和字间距
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
 | 
/** *  同时更改行间距和字间距 * *  @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;} | 
需求:更改某些文字的颜色并修改其字体,突出重点强调
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
 | 
/** *  改变某些文字的颜色 并单独设置其字体 * *  @param font        设置的字体 *  @param color       颜色 *  @param totalString 总的字符串 *  @param subArray    想要变色的字符数组 * *  @return 生成的富文本 */+ (NSMutableAttributedString *)ls_changeFontAndColor:(UIFont *)font Color:(UIColor *)color TotalString:(NSString *)totalString SubStringArray:(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;} | 
以上几种API综合效果图如下

二、谈谈NSAttributedString
1、初始化方法
| 
 1 
2 
3 
 | 
- (instancetype)initWithString:(NSString *)str;- (instancetype)initWithString:(NSString *)str attributes:(nullable NSDictionary<nsstring *, id> *)attrs;- (instancetype)initWithAttributedString:(NSAttributedString *)attrStr;</nsstring *, id> | 
第一种使用字符串初始化初始化富文本
第二种使用字符串及属性字典(就是配置富文本的相关属性)初始化富文本
第三种就是用其他富文本初始化富文本
2、常用操作API
为某一范围内文字添加某个属性
| 
 1 
 | 
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range; | 
示例:

为某一范围内文字添加多个属性(两个API效果与格式一样)
| 
 1 
2 
 | 
- (void)addAttributes:(NSDictionary<nsstring *, id> *)attrs range:(NSRange)range;- (void)setAttributes:(nullable NSDictionary<nsstring *, id> *)attrs range:(NSRange)range;</nsstring *, id></nsstring *, id> | 
示例:

移除某范围内的某个属性(可与添加属性API对照,不在示例)
| 
 1 
 | 
- (void)removeAttribute:(NSString *)name range:(NSRange)range; | 
其他部分API(见名知意,可与NSString对照不在赘述)
| 
 1 
2 
3 
4 
5 
 | 
- (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讲解
API路径地址如下:
/YiDing/Class/Helpers/LSCoreToolCenter
截图如下:

使用示例路径如下:
/YiDing/Class/Sections/LSSection/NSMutableAttributedString
截图如下:

富文本常用封装(NSAttributedString浅析)的更多相关文章
- 【转】iOS使用NSMutableAttributedString实现富文本
		
iOS使用NSMutableAttributedString实现富文本 在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘 ...
 - vue 富文本编辑器  项目实战用法
		
1.挑个富文本编辑器 首先针对自己项目的类型,确定自己要用啥编辑器. 1.1 wangeditor 如果一般类似博客这种项目不需要花里胡哨的,功能也不要求贼多的,推荐一下wangeditor(点击跳转 ...
 - NSAttributedString富文本简单介绍和常用方法浅析
		
NSAttributedString基本知识点介绍 1.初始化方法 - (instancetype)initWithString:(NSString *)str; - (instancetype)in ...
 - iOS富文本-NSAttributedString简单封装
		
直接调用系统的写起来比较麻烦,封装一下 因为要简单所以就写类方法 WJAttributeStyle 基类 ) { ; i < styles.count; i ++) { ...
 - React Native之TextInput的介绍与使用(富文本封装与使用实例,常用输入框封装与使用实例)
		
React Native之TextInput的介绍与使用(富文本封装与使用实例,常用输入框封装与使用实例) TextInput组件介绍 TextInput是一个允许用户在应用中通过键盘输入文本的基本组 ...
 - [iOS] 利用 NSAttributedString 进行富文本处理
		
/iOS /[iOS] 利用 NSAttributedString 进行富文本处理 2016年4月4日 刘小龙 iOS 许多时候我们需要以各种灵活的形式展现文本信息,即富文本.普通的 text 属性显 ...
 - Angular封装WangEditor富文本组件
		
富文本组件是web程序中很常用的一个组件,特别是要开发一个博客,论坛这类的网站后台. 得益于Angular的强大,封装WangEditor组件非常简单 1.使用yarn或者npm安装wangedito ...
 - 【改】iOS学习之NSAttributedString(富文本)
		
NSAttributedString 叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体.字号.字体大小等各不相同的风格,还可以对段落进行格式化,一般都是对可变富文本(N ...
 - iOS学习之NSAttributedString(富文本)
		
NSAttributedString 叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体.字号.字体大小等各不相同的风格,还可以对段落进行格式化,一般都是对可变富文本(N ...
 
随机推荐
- window对象中的常见方法
			
<body><!-- window对象中的常见方法--><script type="text/javascript"> var timeid; ...
 - JS写的CRC16校验算法(查表法)
			
var CRC = {}; CRC._auchCRCHi = [ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0 ...
 - windows下安装 sphinx 数据库全文搜索引擎
			
此次演示的环境是:win7系统,64位,php5.4.x,apache sphinx,斯芬克斯(英语不好的同学可以直接读这个音),意狮身人面像 特点:创建索引速度快,3分钟左右能创建100万条记录的索 ...
 - 远程出发jenkins jobs
			
wget -O - -q "http://jenkins_server/job/ttt/buildWithParameters?TEST1=Value" wget -O - -q ...
 - App 打包并跳过 AppStore 的发布下载
			
一.App 打包 (编译 -> 链接 -> 打包) 1) 下载发布版的证书并安装. 2)Target -> Build Setting,改为发布版本的 profile 3) Targ ...
 - php 关于stripslashes 和 addslashes的使用
			
一.首先要先说到 php magic_quotes_gpc .(get_magic_quotes_gpc()可以检测是否开启) PHP magic_quotes_gpc作用范围是:WEB客户服务端: ...
 - Python开发【程序】:计算器
			
开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568 ...
 - HTML5 Canvas绘文本动画(使用CSS自定义字体)
			
一.HTML代码: <!DOCTYPE html> <html> <head> <title>Matrix Text - HTML5 Canvas De ...
 - ios - 纯代码创建collectionView
			
开始考虑好一点点时间,因为一般的都是用xib,或者storyboard来写的.这次用纯代码...废话较多请看 首先把storyboard干掉,工程里面的main干掉 由于干掉了storyboard则启 ...
 - Salesforce.com Object Query Language (SOQL) 示例
			
Salesforce 中的用户操作 打开按公司名称排序的供应商记录列表视图.SOQL 查询 SELECT CompanyName__c,ContactName__c FROM Suppliers__x ...