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 *)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;
}
效果图:
源码下载:http://download.csdn.net/detail/hbblzjy/9585735
NSAttributedString富文本简单介绍和常用方法浅析的更多相关文章
- 【改】iOS学习之NSAttributedString(富文本)
NSAttributedString 叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体.字号.字体大小等各不相同的风格,还可以对段落进行格式化,一般都是对可变富文本(N ...
- iOS学习之NSAttributedString(富文本)
NSAttributedString 叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体.字号.字体大小等各不相同的风格,还可以对段落进行格式化,一般都是对可变富文本(N ...
- tinymce 富文本简单使用
tinymce.init({ //选择器 selector:'textarea', //配置顶部的菜单栏显示隐藏 menubar: false, //配置中文(默认没有中文包,需要到官网下载,放到la ...
- Java Linked集合的简单介绍和常用方法的使用
LinkedList的简单介绍 java.util.LinkedList 集合数据存储的结构是链表结构.LinkedList是一个双向链表在实际开发中,对一个集合元素的添加和删除,经常涉及到首尾操作, ...
- UEditor富文本简单使用
简单使用编辑器UEditor(录入)步骤: 1,下载Ueditor插件(文中使用1.4.3版本),添加js引用. <script src="../js/ueditor/ueditor. ...
- NSMutableAttributedString/NSAttributedString 富文本设置
今天在做项目的过程中,我们的设计师想要一种字体四周都带阴影的效果,但是我们平时使用的setShadowColor 和setShadowOffset是达不到这种效果,setShadowOffset 只能 ...
- JAVAEE——宜立方商城04:图片服务器FastDFS、富文本编辑器KindEditor、商品添加功能完成
1. 学习计划 1.图片上传 a) 图片服务器FastDFS b) 图片上传功能实现 2.富文本编辑器的使用KindEditor 3.商品添加功能完成 2. 图片服务器的安装 1.存储空间可扩展. 2 ...
- django 之(五) --- 验证码|富文本|邮箱短信
验证码 在用户登录,注册以及一些敏感操作的时候,我们为了防止服务器被暴力请求,或爬虫爬取,我们可以使用验证码进行过滤,减轻服务器的压力. 原生实现: 库名:pip install Pillow ...
- iOS富文本-NSAttributedString简单封装
直接调用系统的写起来比较麻烦,封装一下 因为要简单所以就写类方法 WJAttributeStyle 基类 ) { ; i < styles.count; i ++) { ...
随机推荐
- kexec 内核快速启动流程分析
一.命令行 1. kexec -l $kpwd --append="$arg" 其中$kpwd =目标内核的路径 $arg =传给内核的参数,与/proc/cmdline一致时表示 ...
- JavaScript基础知识必知!!!
JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型. JS作用:表单验证,减轻服务端的压力:添加页面动画效果:动态更改页面内容:Ajax网络请求. 下面简单介 ...
- Fiddler实现对手机抓包
工具 && 前提条件: 1. 安装了Fiddler的PC一台 2. 手机一部 3. 手机和PC是在同一个局域网内,或者至少能够联通,即手机的流量能够转发到PC端上能够被其捕获 PC端 ...
- ZooKeeper之(六)应用实例
6.1 Java API 客户端要连接 Zookeeper服务器可以通过创建 org.apache.zookeeper.ZooKeeper 的一个实例对象,然后调用这个类提供的接口来和服务器交互. Z ...
- 衣带渐宽终不悔,为伊消得人憔悴--DbHelper增强版
核心理念 如何使用 测试实例 数据库内详细数据信息 测试代码 数据库连接池测试 测试集 延伸 相关下载链接 前几日,写了一篇关于一个 轻量级数据持久化的框架的博客(点击浏览: http://blog. ...
- 万众瞩目之下,ANGULAR 2终于正式发布啦!
转载:https://angular.io/ 怀着期盼的心情,终于盼到了稳定版本,那么我就可以专心研究了,不再为不定期的修复烦恼咯. 今天,在 Google 总部一个特别的聚会上,我们发布了 Angu ...
- Android Multimedia框架总结(三)MediaPlayer中创建到setDataSource过程
转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52392430 前言:前一篇的mediaPlayer ...
- Effective C++ ——资源管理
条款13:以对象来管理资源 在C++中我们经常会涉及到资源的申请与申请,一般都是由关键字new 和 delete来操作的,两者都是成对存在的,缺一不可,否则会出现意想不到的问题,例如: class I ...
- introduction of velocity
一.velocity 简介 基于java 的模板引擎,apache 旗下的开源软件项目. 目的在于隔离 表示层和业务逻辑层,当然现在做的不仅仅是这些. 二.应用场景 web 应用程序:创建html页面 ...
- jvm java虚拟机 新生代的配置
1.1.1.1. -Xmn参数 参数-Xmn1m可以用于设置新生代的大小.设置一个较大的新生代会影响老生代的大小,因为这两者的总和是一定的,这个系统参数对于系统性能以及GC行为有很大的影响,新生代一般 ...