代码改变世界

iOS - lable的text中不同字符不同颜色设置,一段文字显示多重颜色

2017-01-17 14:21  菜鸟Alex  阅读(1150)  评论(0编辑  收藏  举报

代码如下


   NSMutableAttributedString *hintString=[[NSMutableAttributedString alloc]initWithString:@"(故障)"];
        NSRange range1=[[hintString string]rangeOfString:@"()"];
        [hintString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:range1];
        NSRange range2=[[hintString string]rangeOfString:@"故障"];
        [hintString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range2];
        //下面是需要给哪个lable进行赋值
        self.lblDpfStatus.attributedText = hintString;


封装成工具类


#import <UIKit/UIKit.h>
@interface NSObject (Tool)

-(NSAttributedString *)setString:(NSString *)str withColorOneStr:(NSString *)oneStr andColorOne:(UIColor *)colorOne andColorTwoStr:(NSString *)twoStr andColorTwo:(UIColor *)colorTwo;

@end

//.m文件中

#import "NSObject+Tool.h"

@implementation NSObject (Tool)

-(NSAttributedString *)setString:(NSString *)str withColorOneStr:(NSString *)oneStr andColorOne:(UIColor *)colorOne andColorTwoStr:(NSString *)twoStr andColorTwo:(UIColor *)colorTwo{
    
    NSMutableAttributedString *hintString=[[NSMutableAttributedString alloc]initWithString:str];
    NSRange range1=[[hintString string]rangeOfString:oneStr];
    [hintString addAttribute:NSForegroundColorAttributeName value:colorOne range:range1];
    NSRange range2=[[hintString string]rangeOfString:twoStr];
    [hintString addAttribute:NSForegroundColorAttributeName value:colorTwo range:range2];
    return hintString;
}

@end


测试工具类


- (void)viewDidLoad {
    
    [super viewDidLoad];
    UILabel * lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 100, 35)];
    lbl.text = @"hello world";
    lbl.attributedText = [self setString:lbl.text withColorOneStr:@"hello" andColorOne:[UIColor orangeColor] andColorTwoStr:@"w" andColorTwo:[UIColor redColor]];
    [self.view addSubview:lbl];
}

测试结果如下

设置的字符串必须是连续的否则无效如图