开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求。NSMuttableAttstring(带属性的字符串),上面的一些需求都可以很简便的实现。
1.实例化方法有两种:
使用字符串来初始化
①:- (id)initWithString:(NSString *)str;
例如:
NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"满1000减60的优惠券一张"];
②初始化的同时,将其属性也进行改变
- (id)initWithString:(NSString *)str attributes:(NSDictionary *)attrs;
例子:
NSDictionary *attributeDict = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont systemFontOfSize:15.0],NSFontAttributeName,
[UIColor redColor],NSForegroundColorAttributeName,nil];
NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"满1000减60的优惠券一张" attributes:attributeDict];
使用方法①进行初始化时,初始化完后要再利用相关的方法进行属性的设置,常使用的方法如下:
为某一范围内文字设置多个属性
- (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;
上面的方法中(NSString *)name
处,需要添加的是要设置的文字的属性,常见的属性有:
NSFontAttributeName //字体
NSParagraphStyleAttributeName //段落格式
NSForegroundColorAttributeName //字体颜色
NSBackgroundColorAttributeName //背景颜色
NSLigatureAttributeName 连体属性,取值为NSNumber 对象(整数),0 表示没有连体字符,1 表示使用默认的连体字符
NSStrikethroughStyleAttributeName//删除线格式 取值为 NSNumber 对象(整数),枚举常量 NSUnderlineStyle中的值
(// NSUnderlineStyleNone 不设置删除线
// NSUnderlineStyleSingle 设置删除线为细单实线
// NSUnderlineStyleThick 设置删除线为粗单实线
// NSUnderlineStyleDouble 设置删除线为细双实线)
NSUnderlineStyleAttributeName //下划线
NSStrokeColorAttributeName//删除线颜色
NSStrokeWidthAttributeName//删除线宽度 取值为 NSNumber 对象(整数),负值填充效果,正值中空效果
NSShadowAttributeName //设置阴影属性,取值为NSShadow 对象
NSTextEffectAttributeName //设置文本特殊效果,取值为 NSString 对象,(图版印刷效果)
NSBaselineOffsetAttributeName //设置基线偏移值,取值为 NSNumber (float),正值上偏,负值下偏
NSObliquenessAttributeName //字形倾斜度,取值为 NSNumber (float),正值右倾,负值左倾
NSExpansionAttributeName //文本横向拉伸属性,取值为 NSNumber (float),正值横向拉伸文本,负值横向压缩文本
NSWritingDirectionAttributeName //文字书写方向
NSVerticalGlyphFormAttributeName //文字排版方向,取值为 NSNumber 对象(整数),0 表示横排文本,1 表示竖排文本(目前iOS总是横排文本iOS7)
NSLinkAttributeName //设置链接属性,点击后调用浏览器打开指定URL地址 取值为NSURL,如: [NSURL URLWithString:@"http://www.baidu.com"]
NSAttachmentAttributeName //文本附件,取值为NSTextAttachment对象,常用于文字图片混排
而方法中(NSDictionary *)attrs
处需要添加是由上面的属性组成的字典。
使用实例:
1.用初始化方法①进行设置
利用Label的attributedText属性来设置:代码如下:
UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 30)];
[self.view addSubview:lable];
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"满减 满1000减60的优惠券一张"];
[str addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(0,2)];
[str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-Bold" size:30.0] range:NSMakeRange(3, 6)];
lable.attributedText = str;
UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 30)];
[self.view addSubview:lable];
NSDictionary *attributeDict = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont systemFontOfSize:15.0],NSFontAttributeName,
[UIColor redColor],NSForegroundColorAttributeName,nil];
NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"满减 满1000减60的优惠券一张" attributes:attributeDict];
lable.attributedText = AttributedStr;
效果如图:
下面列举几种例子:
带有删除线的
UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 30)];
[self.view addSubview:lable];
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"满减 满1000减60的优惠券一张"];
//NSStrikethroughStyleAttributeName:为文字添加删除线。必须设置NSNumber对象为Value
[str addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:NSMakeRange(0,2)];
//NSFontAttributeName 字体
[str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-Bold" size:30.0] range:NSMakeRange(3, 6)];
lable.attributedText = str;