你的位置:首页 > 操作系统

[操作系统]iOS学习之NSAttributedString(富文本)


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

一、NSMutableAttributedString 类的部分常用方法

// 在一定范围中添加单个文字属性// 参数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;

二、字符属性

 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 以外的值都未定义。

 三、代码示例

 在这里给大家举了几个简单的例子,有兴趣的可以尝试其余属性的效果。

  • 字符串没有添加属性
  NSString *contentStr = @"Hello World!";    // 初始化属性字符串  NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:[contentStr stringByAppendingString:@"\n\n"]];

  • 添加单个属性(以字体颜色和字体大小为例)
  [attrStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(6, 6)];  [attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:25] range:NSMakeRange(0, 12)];

  • 使用属性字典添加多个属性
   [attrStr addAttributes:@{               NSForegroundColorAttributeName : [UIColor yellowColor],               NSBackgroundColorAttributeName : [UIColor lightGrayColor]               }           range:NSMakeRange(0,6)];

  • 删除属性
  [attrStr removeAttribute:NSForegroundColorAttributeName range:NSMakeRange(6, 3)];  [attrStr removeAttribute:NSBackgroundColorAttributeName range:NSMakeRange(5, 1)];

字符串全部替换

 

   NSAttributedString *str = [[NSAttributedString alloc] initWithString:@"123"];   [attrStr setAttributedString:str];

 

 

 

 以上是部分方法的使用,大家有兴趣的可以自己试试其他的方法。