NSAttributedString基本知识点介绍

1、初始化方法

  1. - (instancetype)initWithString:(NSString *)str;
  2. - (instancetype)initWithString:(NSString *)str attributes:(nullable
  3. NSDictionary<NSString *, id> *)attrs;
  4. - (instancetype)initWithAttributedString:(NSAttributedString *)attrStr;
  • 第一种使用字符串初始化初始化富文本
  • 第二种使用字符串及属性字典(就是配置富文本的相关属性)初始化富文本
  • 第三种就是用其他富文本初始化富文本

2、常用操作

  • 为某一范围内文字添加某个属性
  1. - (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
  • 为某一范围内文字添加多个属性(两个API效果与格式一样)
  1. - (void)addAttributes:(NSDictionary<NSString *, id> *)attrs range:(NSRange)range;
  2. - (void)setAttributes:(nullable NSDictionary<NSString *, id> *)attrs
  3. range:(NSRange)range;
  • 移除某范围内的某个属性(可与添加属性API对照,不在示例)
  1. - (void)removeAttribute:(NSString *)name range:(NSRange)range;
  • 其他部分API(见名知意,可与NSString对照不在赘述)
  1. - (void)replaceCharactersInRange:(NSRange)range withAttributedString:
  2. (NSAttributedString *)attrString;
  3. - (void)insertAttributedString:(NSAttributedString *)attrString
  4. atIndex:(NSUInteger)loc;
  5. - (void)appendAttributedString:(NSAttributedString *)attrString;
  6. - (void)deleteCharactersInRange:(NSRange)range;
  7. - (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;

  • 需求:在我们日常开发中,某些句子中会有改变某些字颜色的需求,当然颜色一般而言就是为了着重强调,常为同一种颜色,所以下面代码是单纯改变一句话中的某些字的颜色
  1. /**
  2. * 单纯改变一句话中的某些字的颜色
  3. *
  4. * @param color 需要改变成的颜色
  5. * @param totalStr 总的字符串
  6. * @param subArray 需要改变颜色的文字数组
  7. *
  8. * @return 生成的富文本
  9. */
  10. + (NSMutableAttributedString *)ls_changeCorlorWithColor:(UIColor *)color TotalString:(NSString *)totalStr
  11. SubStringArray:(NSArray *)subArray {
  12. NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalStr];
  13. for (NSString *rangeStr in subArray) {
  14. NSRange range = [totalStr rangeOfString:rangeStr options:NSBackwardsSearch];
  15. [attributedStr addAttribute:NSForegroundColorAttributeName value:color range:range];
  16. }
  17. return attributedStr;
  18. }
  • 需求:需要更改字间距来适应整体UI
  1. /**
  2. * 单纯改变句子的字间距(需要 <CoreText/CoreText.h>)
  3. *
  4. * @param totalString 需要更改的字符串
  5. * @param space 字间距
  6. *
  7. * @return 生成的富文本
  8. */
  9. + (NSMutableAttributedString *)ls_changeSpaceWithTotalString:(NSString *)totalString Space:(CGFloat)space {
  10. NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];
  11. long number = space;
  12. CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
  13. [attributedStr addAttribute:(id)kCTKernAttributeName value:(__bridge id)num range:NSMakeRange(0,[attributedStr length])];
  14. CFRelease(num);
  15. return attributedStr;
  16. }
  • 需求:需要改变行间距来适应整体UI
  1. /**
  2. * 单纯改变段落的行间距
  3. *
  4. * @param totalString 需要更改的字符串
  5. * @param lineSpace 行间距
  6. *
  7. * @return 生成的富文本
  8. */
  9. + (NSMutableAttributedString *)ls_changeLineSpaceWithTotalString:(NSString *)totalString LineSpace:(CGFloat)lineSpace {
  10. NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];
  11. NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
  12. [paragraphStyle setLineSpacing:lineSpace];
  13. [attributedStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [totalString length])];
  14. return attributedStr;
  15. }
  • 需求:同时更改行间距和字间距
  1. /**
  2. * 同时更改行间距和字间距
  3. *
  4. * @param totalString 需要改变的字符串
  5. * @param lineSpace 行间距
  6. * @param textSpace 字间距
  7. *
  8. * @return 生成的富文本
  9. */
  10. + (NSMutableAttributedString *)ls_changeLineAndTextSpaceWithTotalString:(NSString *)totalString LineSpace:(CGFloat)lineSpace
  11. textSpace:(CGFloat)textSpace {
  12. NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];
  13. NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
  14. [paragraphStyle setLineSpacing:lineSpace];
  15. [attributedStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [totalString length])];
  16. long number = textSpace;
  17. CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
  18. [attributedStr addAttribute:(id)kCTKernAttributeName value:(__bridge id)num range:NSMakeRange(0,[attributedStr length])];
  19. CFRelease(num);
  20. return attributedStr;
  21. }
  • 需求:更改某些文字的颜色并修改其字体,突出重点强调
  1. /**
  2. * 改变某些文字的颜色 并单独设置其字体
  3. *
  4. * @param font 设置的字体
  5. * @param color 颜色
  6. * @param totalString 总的字符串
  7. * @param subArray 想要变色的字符数组
  8. *
  9.  * @return 生成的富文本
  10. */
  11. + (NSMutableAttributedString *)ls_changeFontAndColor:(UIFont *)font Color:(UIColor *)color TotalString:(NSString *)totalString
  12.  SubStringArray:(NSArray *)subArray {
  13. NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];
  14. for (NSString *rangeStr in subArray) {
  15. NSRange range = [totalString rangeOfString:rangeStr options:NSBackwardsSearch];
  16. [attributedStr addAttribute:NSForegroundColorAttributeName value:color range:range];
  17. [attributedStr addAttribute:NSFontAttributeName value:font range:range];
  18. }
  19. return attributedStr;
  20. }

效果图:

源码下载:http://download.csdn.net/detail/hbblzjy/9585735

NSAttributedString富文本简单介绍和常用方法浅析的更多相关文章

  1. 【改】iOS学习之NSAttributedString(富文本)

    NSAttributedString 叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体.字号.字体大小等各不相同的风格,还可以对段落进行格式化,一般都是对可变富文本(N ...

  2. iOS学习之NSAttributedString(富文本)

    NSAttributedString 叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体.字号.字体大小等各不相同的风格,还可以对段落进行格式化,一般都是对可变富文本(N ...

  3. tinymce 富文本简单使用

    tinymce.init({ //选择器 selector:'textarea', //配置顶部的菜单栏显示隐藏 menubar: false, //配置中文(默认没有中文包,需要到官网下载,放到la ...

  4. Java Linked集合的简单介绍和常用方法的使用

    LinkedList的简单介绍 java.util.LinkedList 集合数据存储的结构是链表结构.LinkedList是一个双向链表在实际开发中,对一个集合元素的添加和删除,经常涉及到首尾操作, ...

  5. UEditor富文本简单使用

    简单使用编辑器UEditor(录入)步骤: 1,下载Ueditor插件(文中使用1.4.3版本),添加js引用. <script src="../js/ueditor/ueditor. ...

  6. NSMutableAttributedString/NSAttributedString 富文本设置

    今天在做项目的过程中,我们的设计师想要一种字体四周都带阴影的效果,但是我们平时使用的setShadowColor 和setShadowOffset是达不到这种效果,setShadowOffset 只能 ...

  7. JAVAEE——宜立方商城04:图片服务器FastDFS、富文本编辑器KindEditor、商品添加功能完成

    1. 学习计划 1.图片上传 a) 图片服务器FastDFS b) 图片上传功能实现 2.富文本编辑器的使用KindEditor 3.商品添加功能完成 2. 图片服务器的安装 1.存储空间可扩展. 2 ...

  8. django 之(五) --- 验证码|富文本|邮箱短信

    验证码 在用户登录,注册以及一些敏感操作的时候,我们为了防止服务器被暴力请求,或爬虫爬取,我们可以使用验证码进行过滤,减轻服务器的压力. 原生实现: 库名:pip install Pillow     ...

  9. iOS富文本-NSAttributedString简单封装

    直接调用系统的写起来比较麻烦,封装一下 因为要简单所以就写类方法 WJAttributeStyle 基类 ) {         ; i < styles.count; i ++) {      ...

随机推荐

  1. JAVA中抽象类的使用

    抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象.抽象类体现的就是一种模板模式的设计,抽象父类可以只定义需要使用的某些方法,把不能实现的某些部分抽象成抽象方法,留给其子类去实现.具体来说,抽 ...

  2. Go 语言指向指针的指针

    如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量. 当定义一个指向指针的指针变量时,第一个指针存放第二个指针的地址,第二个指针存放变量的地址: 指向指针的指针变量声 ...

  3. Linux中MySQL忽略表中字段大小写

    linux 下,mysql 的表面默认是区分大小写的,windows 下默认不区分大小写,我们大多数在windows 下开发,之后迁移到linux(特别是带有Hibernate的工程),可以修改配置是 ...

  4. JVM的Server与Client运行模式区别与切换

    概述 JVM有两种运行模式Server与Client.两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢:但是启动进入稳定期长期运行之后Server模式的程序运行速度比Clie ...

  5. Android源码解析——LruCache

    我认为在写涉及到数据结构或算法的实现类的源码解析博客时,不应该急于讲它的使用或马上展开对源码的解析,而是要先交待一下这个数据结构或算法的资料,了解它的设计,再从它的设计出发去讲如何实现,最后从实现的角 ...

  6. Android动态修改ToolBar的Menu菜单

    Android动态修改ToolBar的Menu菜单 效果图 实现 实现很简单,就是一个具有3个Action的Menu,在我们滑动到不同状态的时候,把对应的Action隐藏了. 开始上货 Menu Me ...

  7. 制定一个apk路径 然后跳出安装界面

    制定一个apk的路径 然后跳出界面让用户选择是否安装 我们系统有一个写好的Activity来协助我们完成这一功能 我们来看看它的清单文件 <?xml version="1.0" ...

  8. 根据class显示或隐藏多个div

    引用一下jquery,然后function放head中 function test(){ $(".1").css("display","none&qu ...

  9. Swift中关于任意类型的数组

    在Objc中你是不可以把一个非对象类型放入数组的,你必须将其"封箱",然后再放入数组. 在Swift中你可将非对象类型轻松放入数组: let ary = [1,2,3] 你可以明确 ...

  10. 深度学习&机器学习资源汇总1

    本篇博客的目地,是对工作学习过程中所遇所见的一些有关深度学习.机器学习的优质资源,作分类汇总,方便自己查阅,也方便他人学习借用. 主要会涉及一些优质的理论书籍和论文.一些实惠好用的工具库和开源库.一些 ...