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

开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求。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;

效果图:
这里写图片描述

你可能感兴趣的:(ios开发入门)