一,概述
NSAttributedString 叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体、字号、字体大小等各不相同的风格,还可以对段落进行格式化.拥有文本显示功能(text 属性)的 UI 控件也都拥有 attributedText 属性.
二,NSAttributedString
API @interface NSAttributedString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding>
// 1.属性
/**
* 把NSAttributedString转为字符串
*/
@property (readonly, copy) NSString *string;
// 2.方法
/**
* 取到设置的属性字典
参数1: 起始位置
参数2: 范围
*/
- (NSDictionary<NSString *, id> *)attributesAtIndex:(NSUInteger)location effectiveRange:(nullable NSRangePointer)range;
@end
@interface NSAttributedString (NSExtendedAttributedString)
@property (readonly) NSUInteger length;
/**
*用某个字符串,创建富文本对象
参数:用于创建的字符串
*/
- (instancetype)initWithString:(NSString *)str;
/**
*用某个字符串和一些字符属性,创建富文本属性
参数1:初始字符串
参数2:字符属性字典
*/
- (instancetype)initWithString:(NSString *)str attributes:(nullable NSDictionary<NSString *, id> *)attrs;
/**
*用一个富文本字符串,创建一个富文本字符串
参数1:用于创建对象的富文本字符串
*/
- (instancetype)initWithAttributedString:(NSAttributedString *)attrStr;
/**
* 从第几个字符开始找属性
*/
- (nullable id)attribute:(NSString *)attrName atIndex:(NSUInteger)location effectiveRange:(nullable NSRangePointer)range;
- (NSAttributedString *)attributedSubstringFromRange:(NSRange)range;
/**
* 返回指定范围的属性
*/
- (NSDictionary<NSString *, id> *)attributesAtIndex:(NSUInteger)location
longestEffectiveRange:(nullable NSRangePointer)range
inRange:(NSRange)rangeLimit;
- (nullable id)attribute:(NSString *)attrName atIndex:(NSUInteger)location
longestEffectiveRange:(nullable NSRangePointer)range
inRange:(NSRange)rangeLimit;
/**
* // 等同性判断
*/
- (BOOL)isEqualToAttributedString:(NSAttributedString *)other;
typedef NS_OPTIONS(NSUInteger, NSAttributedStringEnumerationOptions) {
NSAttributedStringEnumerationReverse = (1UL << 1),
NSAttributedStringEnumerationLongestEffectiveRangeNotRequired = (1UL << 20)
};
/**
* 遍历获得符合指定属性或属性字典的区域(range),并在 block 中进行设置
*/
- (void)enumerateAttributesInRange:(NSRange)enumerationRange options:(NSAttributedStringEnumerationOptions)opts
usingBlock:(void (NS_NOESCAPE ^)
(NSDictionary<NSString *, id> *attrs, NSRange range, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);
- (void)enumerateAttribute:(NSString *)attrName inRange:(NSRange)enumerationRange
options:(NSAttributedStringEnumerationOptions)opts
usingBlock:(void (NS_NOESCAPE ^)(id _Nullable value, NSRange range, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);
@end
@interface NSAttributedString (NSAttributedStringAttachmentConveniences)
/**
* 插入表情符 配合NSTextAttachment,NSTextStorage,UITextView或UITextfied使用
*/
+ (NSAttributedString *)attributedStringWithAttachment:(NSTextAttachment *)attachment NS_AVAILABLE(10_0, 7_0);
@end
三,NSMutableAttributedString 继承于 NSAttributedString
API
@interface NSMutableAttributedString (NSExtendedMutableAttributedString)
//属性
@property (readonly, retain) NSMutableString *mutableString;
/**
* 在一定范围中添加单个文字属性
参数1:字符属性名
参数2:属性值
参数3:范围
*/
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
/**
* 在一定范围中使用字典添加多个文字属性
参数1:属性字典
参数2:范围
*/
- (void)addAttributes:(NSDictionary<NSString *, id> *)attrs range:(NSRange)range;
/**
* 在一定范围中删除文字具有的某个文字属性
参数1:字符属性名
参数2:范围
*/
- (void)removeAttribute:(NSString *)name range:(NSRange)range;
/**
*在一定范围中替换字符串
参数1:范围
参数2:要替换的字符串
*/
- (void)replaceCharactersInRange:(NSRange)range withAttributedString:(NSAttributedString *)attrString;
/**
* 在对应的角标处插入富文本
参数1:要插入的字符串
参数2:要插入的角标位置
*/
- (void)insertAttributedString:(NSAttributedString *)attrString atIndex:(NSUInteger)loc;
/**
*将某个富文本拼接到后面
参数:要拼接的字符串
*/
- (void)appendAttributedString:(NSAttributedString *)attrString;
/**
*删除一定范围中的字符
参数:范围
*/
- (void)deleteCharactersInRange:(NSRange)range;
/**
*将字符串全部置换为另一个富文本字符串
参数:置换后的富文本字符串
*/
- (void)setAttributedString:(NSAttributedString *)attrString;
/**
*开始编辑
*/
- (void)beginEditing;
/**
*结束编辑
*/
- (void)endEditing;
@end
四,字符属性
1.NSString *const NSFontAttributeName(字体):该属性所对应的值是一个 UIFont 对象。该属性用于改变一段文本的字体。如果不指定该属性,则默认为12-point Helvetica(Neue)。
2.NSString *const NSParagraphStyleAttributeName(段落):
该属性所对应的值是一个 NSParagraphStyle 对 象。该属性在一段文本上应用多个属性。如果不指定该属性,则默认为 NSParagraphStyle 的 defaultParagraphStyle 方法返回的默认段落属性。想要了解NSParagraphStyle可以自行百度学习,在这里不详细描述。注意:lable的numberOfLines 属性必须设置为0,段落样式才能生效。
3.NSString *const NSForegroundColorAttributeName(字体颜色):
该属性所对应的值是一个 UIColor 对象。该属性用于指定一段文本的字体颜色。如果不指定该属性,则默认为黑色。
4.NSString *const NSBackgroundColorAttributeName(字体背景色):
该属性所对应的值是一个 UIColor 对象。该属性用于指定一段文本的背景颜色。如果不指定该属性,则默认无背景色。
5.NSString *const NSLigatureAttributeName(连字符):
该属性所对应的值是一个 NSNumber 对象(整数)。连体字符是指某些连在一起的字符,它们采用单个的图元符号。0 表示没有连体字符。1 表示使用默认的连体字符。2表示使用所有连体符号。默认值为 1(注意,iOS 不支持值为 2)。
6.NSString *const NSKernAttributeName(字间距):
该属性所对应的值是一个 NSNumber 对象(整数)。连体字符是指某些连在一起的字符,它们采用单个的图元符号。0 表示没有连体字符。1 表示使用默认的连体字符。2表示使用所有连体符号。默认值为 1(注意,iOS 不支持值为 2)。
7.NSString *const NSStrikethroughStyleAttributeName(删除线):
该属性所对应的值是一个 NSNumber 对象(整数)。该值指定是否在文字上加上删除线,该值参考“Underline Style Attributes”。默认值是NSUnderlineStyleNone。
8.NSString *const NSUnderlineStyleAttributeName(下划线):
该属性所对应的值是一个 NSNumber 对象(整数)。该值指定是否在文字上加上下划线,该值参考“Underline Style Attributes”。默认值是NSUnderlineStyleNone。
9.NSString *const NSStrokeColorAttributeName(边线颜色):
该属性所对应的值是一个 UIColor 对象。如果该属性不指定(默认),则等同于 NSForegroundColorAttributeName。否则,指定为删除线或下划线颜色。更多细节见“Drawing attributedstrings that are both filled and stroked”。
10.NSString *const NSStrokeWidthAttributeName(边线宽度):
该属性所对应的值是一个 NSNumber 对象(小数)。该值改变描边宽度(相对于字体size 的百分比)。默认为 0,即不改变。正数只改变描边宽度。负数同时改变文字的描边和填充宽度。例如,对于常见的空心字,这个值通常为3.0。
11.NSString *const NSShadowAttributeName(阴影):
该属性所对应的值是一个 NSShadow 对象。默认为 nil。
12.NSString *const NSVerticalGlyphFormAttributeName(横竖排版):
该属性所对应的值是一个 NSNumber 对象(整数)。0 表示横排文本。1 表示竖排文本。在 iOS 中,总是使用横排文本,0 以外的值都未定义。