富文本常用封装(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讲解

Demo在此,点击可跳转

API路径地址如下:

/YiDing/Class/Helpers/LSCoreToolCenter

截图如下:

使用示例路径如下:

/YiDing/Class/Sections/LSSection/NSMutableAttributedString

截图如下:

时间: 2024-10-28 08:55:23

富文本常用封装(NSAttributedString)的相关文章

富文本常用封装(NSAttributedString浅析)

最近经常遇到关于富文本的一些需求,特此封装了几个最常用的API分享给大家,但授之以鱼不如授之以渔,接下来会顺便谈谈NSAttributedString,确保你读了本篇文章能够自己封装关于富文本的API,本文封装API的示例Demo再此,拿去用吧!骚年们! 一.常用需求封装 需求:在我们日常开发中,某些句子中会有改变某些字颜色的需求,当然颜色一般而言就是为了着重强调,常为同一种颜色,所以下面代码是单纯改变一句话中的某些字的颜色 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

富文本的封装-NSAttributedString 的简易封装

有时我们经常写富文老是写出这样子的出来,极易出错而且可读性非常差,如下: - (void)typeOne{ NSString *string                            = @"你好,CSDN!"; NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string]; // 设置富文本样式 [attributedStrin

iOS富文本-NSAttributedString简单封装

直接调用系统的写起来比较麻烦,封装一下 因为要简单所以就写类方法 WJAttributeStyle 基类 #import <Foundation/Foundation.h>#import <UIKit/UIKit.h>/** *  基类富文本 */@interface WJAttributeStyle : NSObject @property (nonatomic,strong)NSString *attributeName;@property (nonatomic,strong)

利用 NSAttributedString 进行富文本处理

原文出自  http://blog.qiji.tech/archives/8335#RegEx_Categories [iOS] 利用 NSAttributedString 进行富文本处理 /iOS /[iOS] 利用 NSAttributedString 进行富文本处理 2016年4月4日 刘小龙 iOS 许多时候我们需要以各种灵活的形式展现文本信息,即富文本.普通的 text 属性显然无法满足要求,这时我们需要利用 Foundation 中的 NSAttributedString——属性字符

[iOS] 利用 NSAttributedString 进行富文本处理

/iOS /[iOS] 利用 NSAttributedString 进行富文本处理 2016年4月4日 刘小龙 iOS 许多时候我们需要以各种灵活的形式展现文本信息,即富文本.普通的 text 属性显然无法满足要求,这时我们需要利用 Foundation 中的 NSAttributedString--属性字符串进行设置.拥有文本显示功能(text 属性)的 UI 控件也都拥有 attributedText 属性. 常用方法 和 NSString 及 Foundation 框架其它集合一样,NSA

iOS常用技术-Label富文本

////  ViewController.m//  Label富文本////  Created by 大欢 on 16/1/19.//  Copyright © 2016年 bjsxt. All rights reserved.// #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {    [super view

富文本NSAttributedString与NSMutableAttributedString

NSAttributedString NSAttributedString用来处理字符串,使在同一字符串内显示出不同属性的字符.(例如:用来处理字符串)总之就是可以设置字符串中指定位置或指定范围内字符的属性. 创建一个NSAttributedString对象 - (instancetype)initWithString:(NSString *)aString   使用字符串初始化对象 - (instancetype)initWithAttributedString:(NSAttributedSt

iOS学习之NSAttributedString(富文本)

NSAttributedString 叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体.字号.字体大小等各不相同的风格,还可以对段落进行格式化,一般都是对可变富文本(NSMutableAttributedString)进行一些操作 一.NSMutableAttributedString 类的部分常用方法 // 在一定范围中添加单个文字属性 // 参数1:字符属性名 // 参数2:属性值 // 参数3:范围 - (void)addAttribute:(NSStrin

常用HTML富文本编辑器

常用的HTML富文本编译器UEditor.CKEditor.TinyMCE.HTMLArea.eWebEditor.KindEditor简介 这篇文章主要介绍了常用的HTML富文本编译器UEditor.CKEditor.TinyMCE.HTMLArea.eWebEditor.KindEditor简介,需要的朋友可以参考下 1.UEditor UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于BSD协议,允许自由使用和修改代码..