iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、下划线等)

iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求。之前在网上找了一些资料,有的是重绘UILabeltextLayer,有的是用html5实现的,都比较麻烦,而且很多UILabel的属性也不起作用了,效果都不理想。后来了解到NSMuttableAttstring(带属性的字符串),上面的一些需求都可以很简便的实现。

1.     实例化方法和使用方法

实例化方法:

使用字符串初始化

- (id)initWithString:(NSString *)str;

例:

NSMutableAttributedString *AttributedStr = [[NSMutableAttributedStringalloc]initWithString:@"今天天气不错呀"];


- (id)initWithString:(NSString *)str attributes:(NSDictionary *)attrs;


字典中存放一些属性名和属性值,如:

NSDictionary *attributeDict = [NSDictionarydictionaryWithObjectsAndKeys:

                                    [UIFontsystemFontOfSize:15.0],NSFontAttributeName,

                                    [UIColorredColor],NSForegroundColorAttributeName,

                                   NSUnderlineStyleAttributeName,NSUnderlineStyleSingle,nil];

NSMutableAttributedString *AttributedStr = [[NSMutableAttributedStringalloc]initWithString:@"今天天气不错呀" attributes:attributeDict];

- (id)initWithAttributedString:(NSAttributedString *)attester;

使用NSAttributedString初始化,跟NSMutableString,NSString类似


使用方法:

为某一范围内文字设置多个属性

- (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;

为某一范围内文字添加某个属性

- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;

为某一范围内文字添加多个属性

- (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;

移除某范围内的某个属性

- (void)removeAttribute:(NSString *)name range:(NSRange)range;

2.     常见的属性及说明

NSFontAttributeName 字体

NSParagraphStyleAttributeName 段落格式 

NSForegroundColorAttributeName 字体颜色

NSBackgroundColorAttributeName  背景颜色

NSStrikethroughStyleAttributeName删除线格式

NSUnderlineStyleAttributeName     下划线格式

NSStrokeColorAttributeName       删除线颜色

NSStrokeWidthAttributeName删除线宽度

NSShadowAttributeName 阴影

更多方法和属性说明详见苹果官方说明文档:

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableAttributedString_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003689

3.   使用实例

<p style="line-height:normal; margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px; font-size:14px"><span style="font-family:Courier New;"><span class="pln" style="color:#000000;line-height:24.5px;">   </span><span style="color:#703daa;line-height:24.5px;"><span class="typ" style="color:#66066;">UILabel</span></span><span class="pln" style="color:#000000;line-height:24.5px;"> </span><span class="pun" style="color:#66660;line-height:24.5px;">*</span><span class="pln" style="color:#000000;line-height:24.5px;">testLabel </span><span class="pun" style="color:#66660;line-height:24.5px;">=</span><span class="pln" style="color:#000000;line-height:24.5px;"> </span><span class="pun" style="color:#66660;line-height:24.5px;">[[</span><span style="color:#703daa;line-height:24.5px;"><span class="typ" style="color:#66066;">UILabel</span></span><span class="pln" style="color:#000000;line-height:24.5px;"> </span><span style="color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">alloc</span></span><span class="pun" style="color:#66660;line-height:24.5px;">]</span><span style="color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">initWithFrame</span></span><span class="pun" style="color:#66660;line-height:24.5px;">:</span><span style="color:#3d1d81;line-height:24.5px;"><span class="typ" style="color:#66066;">CGRectMake</span></span><span class="pun" style="color:#66660;line-height:24.5px;">(</span><span style="color:#272ad8;line-height:24.5px;"><span class="lit" style="color:#06666;">0</span></span><span class="pun" style="color:#66660;line-height:24.5px;">,</span><span class="pln" style="color:#000000;line-height:24.5px;"> </span><span style="color:#272ad8;line-height:24.5px;"><span class="lit" style="color:#06666;">100</span></span><span class="pun" style="color:#66660;line-height:24.5px;">,</span><span class="pln" style="color:#000000;line-height:24.5px;"> </span><span style="color:#272ad8;line-height:24.5px;"><span class="lit" style="color:#06666;">320</span></span><span class="pun" style="color:#66660;line-height:24.5px;">,</span><span class="pln" style="color:#000000;line-height:24.5px;"> </span><span style="color:#272ad8;line-height:24.5px;"><span class="lit" style="color:#06666;">30</span></span><span class="pun" style="color:#66660;line-height:24.5px;">)];</span></span></p><p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span style="font-family:Courier New;"><span style="font-size:14px;line-height:24.5px;"><span class="pln" style="color:#000000;">   testLabel</span><span class="pun" style="color:#66660;">.</span></span><span style="font-size:14px;color:#703daa;line-height:normal;"><span class="pln" style="color:#000000;line-height:24.5px;">backgroundColor</span></span><span style="font-size:14px;line-height:24.5px;"><span class="pln" style="color:#000000;"> </span><span class="pun" style="color:#66660;">=</span><span class="pln" style="color:#000000;"> </span><span class="pun" style="color:#66660;">[</span></span><span style="font-size:14px;color:#703daa;line-height:normal;"><span class="typ" style="color:#66066;line-height:24.5px;">UIColor</span></span><span style="font-size:14px;line-height:24.5px;"><span class="pln" style="color:#000000;"> </span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">lightGrayColor</span></span><span style="font-size:14px;line-height:24.5px;"><span class="pun" style="color:#66660;">];</span></span></span></p><p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span style="font-family:Courier New;"><span style="font-size:14px;line-height:24.5px;"><span class="pln" style="color:#000000;">   testLabel</span><span class="pun" style="color:#66660;">.</span></span><span style="font-size:14px;color:#703daa;line-height:24.5px;"><span class="pln" style="color:#000000;">textAlignment</span></span><span style="font-size:14px;line-height:24.5px;"><span class="pln" style="color:#000000;"> </span><span class="pun" style="color:#66660;">=</span><span class="pln" style="color:#000000;"> </span></span><span style="font-size:14px;color:#3d1d81;line-height:normal;"><span class="typ" style="color:#66066;line-height:24.5px;">NSTextAlignmentCenter</span></span><span style="font-size:14px;line-height:24.5px;"><span class="pun" style="color:#66660;">;</span></span></span></p><p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span style="font-family:Courier New;"><span style="font-size:14px;line-height:24.5px;"><span class="pln" style="color:#000000;">   </span></span><span style="font-size:14px;color:#703daa;line-height:normal;"><span class="typ" style="color:#66066;line-height:24.5px;">NSMutableAttributedString</span></span><span style="font-size:14px;line-height:24.5px;"><span class="pln" style="color:#000000;"> </span><span class="pun" style="color:#66660;">*</span><span class="typ" style="color:#66066;">AttributedStr</span><span class="pln" style="color:#000000;"> </span><span class="pun" style="color:#66660;">=</span><span class="pln" style="color:#000000;"> </span><span class="pun" style="color:#66660;">[[</span></span><span style="font-size:14px;color:#703daa;line-height:normal;"><span class="typ" style="color:#66066;line-height:24.5px;">NSMutableAttributedString</span></span><span style="font-size:14px;line-height:24.5px;"><span class="pln" style="color:#000000;"> </span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">alloc</span></span><span style="font-size:14px;line-height:24.5px;"><span class="pun" style="color:#66660;">]</span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">initWithString</span></span><span style="font-size:14px;line-height:24.5px;"><span class="pun" style="color:#66660;">:</span></span><span style="font-size:14px;color:#d12f1b;line-height:24.5px;"><span class="pun" style="color:#66660;">@</span><span class="str" style="color:#0880;">"</span></span><span style="font-size:14px;color:#d12f1b;line-height:normal;"><span class="str" style="color:#0880;line-height:24.5px;">今天天气不错呀</span></span><span style="font-size:14px;color:#d12f1b;line-height:24.5px;"><span class="str" style="color:#0880;">"</span></span><span style="font-size:14px;line-height:24.5px;"><span class="pun" style="color:#66660;">];</span></span></span></p><p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span style="font-family:Courier New;"><span style="font-size:14px;line-height:normal;"><span class="pln" style="color:#000000;line-height:24.5px;">   </span><span class="pun" style="color:#66660;line-height:24.5px;">[</span><span class="typ" style="color:#66066;line-height:24.5px;">AttributedStr</span><span class="pln" style="color:#000000;line-height:24.5px;"> </span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">addAttribute</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">:</span></span><span style="font-size:14px;color:#703daa;line-height:24.5px;"><span class="typ" style="color:#66066;">NSFontAttributeName</span></span></span></p><p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span style="font-family:Courier New;"><span style="font-size:14px;line-height:normal;"><span class="pln" style="color:#000000;line-height:24.5px;">                         </span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">value</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">:[</span></span><span style="font-size:14px;color:#703daa;line-height:24.5px;"><span class="typ" style="color:#66066;">UIFont</span></span><span style="font-size:14px;line-height:normal;"><span class="pln" style="color:#000000;line-height:24.5px;"> </span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">systemFontOfSize</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">:</span></span><span style="font-size:14px;color:#272ad8;line-height:24.5px;"><span class="lit" style="color:#06666;">16.0</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">]</span></span></span></p><p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span style="font-family:Courier New;"><span style="font-size:14px;line-height:normal;"><span class="pln" style="color:#000000;line-height:24.5px;">                         </span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">range</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">:</span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="typ" style="color:#66066;">NSMakeRange</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">(</span></span><span style="font-size:14px;color:#272ad8;line-height:24.5px;"><span class="lit" style="color:#06666;">2</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">,</span><span class="pln" style="color:#000000;line-height:24.5px;"> </span></span><span style="font-size:14px;color:#272ad8;line-height:24.5px;"><span class="lit" style="color:#06666;">2</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">)];</span></span></span></p><p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span style="font-family:Courier New;"><span style="font-size:14px;line-height:24.5px;"><span class="pln" style="color:#000000;">   </span><span class="pun" style="color:#66660;">[</span><span class="typ" style="color:#66066;">AttributedStr</span><span class="pln" style="color:#000000;"> </span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">addAttribute</span></span><span style="font-size:14px;line-height:24.5px;"><span class="pun" style="color:#66660;">:</span></span><span style="font-size:14px;color:#703daa;line-height:normal;"><span class="typ" style="color:#66066;line-height:24.5px;">NSForegroundColorAttributeName</span></span></span></p><p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span style="font-family:Courier New;"><span style="font-size:14px;line-height:normal;"><span class="pln" style="color:#000000;line-height:24.5px;">                         </span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">value</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">:[</span></span><span style="font-size:14px;color:#703daa;line-height:24.5px;"><span class="typ" style="color:#66066;">UIColor</span></span><span style="font-size:14px;line-height:normal;"><span class="pln" style="color:#000000;line-height:24.5px;"> </span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">redColor</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">]</span></span></span></p><p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span style="font-family:Courier New;"><span style="font-size:14px;line-height:normal;"><span class="pln" style="color:#000000;line-height:24.5px;">                         </span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">range</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">:</span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="typ" style="color:#66066;">NSMakeRange</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">(</span></span><span style="font-size:14px;color:#272ad8;line-height:24.5px;"><span class="lit" style="color:#06666;">2</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">,</span><span class="pln" style="color:#000000;line-height:24.5px;"> </span></span><span style="font-size:14px;color:#272ad8;line-height:24.5px;"><span class="lit" style="color:#06666;">2</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">)];</span></span></span></p><p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span style="font-family:Courier New;"><span style="font-size:14px;line-height:normal;"><span class="pln" style="color:#000000;line-height:24.5px;">   testLabel</span><span class="pun" style="color:#66660;line-height:24.5px;">.</span></span><span style="font-size:14px;color:#703daa;line-height:24.5px;"><span class="pln" style="color:#000000;">attributedText</span></span><span style="font-size:14px;line-height:normal;"><span class="pln" style="color:#000000;line-height:24.5px;"> </span><span class="pun" style="color:#66660;line-height:24.5px;">=</span><span class="pln" style="color:#000000;line-height:24.5px;"> </span><span class="typ" style="color:#66066;line-height:24.5px;">AttributedStr</span><span class="pun" style="color:#66660;line-height:24.5px;">;</span></span></span></p><p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"><span style="font-family:Courier New;"><span style="font-size:14px;line-height:normal;"><span class="pln" style="color:#000000;line-height:24.5px;">   </span><span class="pun" style="color:#66660;line-height:24.5px;">[</span></span><span style="font-size:14px;color:#bb2ca2;line-height:24.5px;"><span class="kwd" style="color:#0088;">self</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">.</span></span><span style="font-size:14px;color:#703daa;line-height:24.5px;"><span class="pln" style="color:#000000;">view</span></span><span style="font-size:14px;line-height:normal;"><span class="pln" style="color:#000000;line-height:24.5px;"> </span></span><span style="font-size:14px;color:#3d1d81;line-height:24.5px;"><span class="pln" style="color:#000000;">addSubview</span></span><span style="font-size:14px;line-height:normal;"><span class="pun" style="color:#66660;line-height:24.5px;">:</span><span class="pln" style="color:#000000;line-height:24.5px;">testLabel</span><span class="pun" style="color:#66660;line-height:24.5px;">];</span></span></span></p>


运行效果:

iOS富文本NSMutableAttributedString,NSAttributedString的使用 - snowyshell - snowyshell的博客

另外,其他可以设置text 的控件(如UIButtonUITextField)也都有该属性,该文章不够详细,只是简单介绍,其他效果的实现参考API中更多的属性及使用方法。


转载自:http://snowyshell.blog.163.com/blog/static/2209140342014475383375/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值