美文网首页iOS开发-UILabel
iOS开发: 设置字符串中数字的颜色

iOS开发: 设置字符串中数字的颜色

作者: 伯wen | 来源:发表于2018-07-26 17:56 被阅读55次
    • 目标效果如下, 将一段字符串中数字的颜色改变成其他颜色:
    目标效果
    • 思路: 通过正则表达式, 找到数字部分在字符串中的位置, 然后创建富文本, 修改数字部分颜色

    • 具体的代码如下, 正则表达式是([0-9]\\d*\\.?\\d*)。 (注意: 下面的代码, 放在了自定义的NSString分类中)

    /**
     修改字符串中数字颜色, 并返回对应富文本
     
     @param color 数字颜色, 包括小数
     @param normalColor 默认颜色
     @return 结果富文本
     */
    - (NSMutableAttributedString *)modifyDigitalColor:(UIColor *)color normalColor:(UIColor *)normalColor;
    {
        NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:@"([0-9]\\d*\\.?\\d*)" options:0 error:NULL];
        
        NSArray<NSTextCheckingResult *> *ranges = [regular matchesInString:self options:0 range:NSMakeRange(0, [self length])];
        
        NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:self attributes:@{NSForegroundColorAttributeName : normalColor}];
        
        for (int i = 0; i < ranges.count; i++) {
            [attStr setAttributes:@{NSForegroundColorAttributeName : color} range:ranges[i].range];
        }
        return attStr;
    }
    
    • 具体使用:
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
    label.numberOfLines = 0;
    label.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:label];
    
    NSString *title = @"轮胎价格195.5元起, 订单满100.00元减10元, 订单满200元减25.50元, 订单满300.55元送风炮机风炮机风炮机风炮机风炮机风炮机风炮机...";
    
    label.attributedText = [title modifyDigitalColor:[UIColor orangeColor] normalColor:[UIColor blackColor]];
    
    • 如果想要把效果图中数字后面的元也就修改, 只需要在正则表达式最后加一个字, 即: ([0-9]\\d*\\.?\\d*)元
    • 代码如下:
    - (NSMutableAttributedString *)modifyDigitalColor:(UIColor *)color normalColor:(UIColor *)normalColor;
    {
        NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:@"([0-9]\\d*\\.?\\d*)元" options:0 error:NULL];
        
        NSArray<NSTextCheckingResult *> *ranges = [regular matchesInString:self options:0 range:NSMakeRange(0, [self length])];
        
        NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:self attributes:@{NSForegroundColorAttributeName : normalColor}];
        
        for (int i = 0; i < ranges.count; i++) {
            [attStr setAttributes:@{NSForegroundColorAttributeName : color} range:ranges[i].range];
        }
        return attStr;
    }
    
    • 最终效果:
    最终效果

    相关文章

      网友评论

        本文标题:iOS开发: 设置字符串中数字的颜色

        本文链接:https://www.haomeiwen.com/subject/roabmftx.html