iOS常用

ios 改变字符串中其中几个字符串的字体颜色

2021-09-15  本文已影响0人  何康老鬼

需求:改变后台传过来的字符串中某几个字符的字体颜色,类似于以下图片效果,改变5 和 0/5的字体颜色。


截屏2021-09-15 下午4.57.06.png

一、解决思路

二、实现(前两种就不讲了,第三种)

1.先通过正则移除掉后台获取的文字里面的特殊字符得到一个最终显示的字符stringA
2.再通过正则得到需要改变颜色的数组字符串stringArr
3.通过字符串改变数组字符串的颜色

第一步
NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(<p>|</p>)" options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators | NSRegularExpressionAnchorsMatchLines | NSRegularExpressionAllowCommentsAndWhitespace error:&error];
    NSString *result = [regex stringByReplacingMatchesInString:self options:0 range:NSMakeRange(0, [self length]) withTemplate:@""];
第二步
NSError *error;
    NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:regular options:0 error:&error];
   NSArray *matches = [regularExpression matchesInString:self options:0 range:NSMakeRange(0, self.length)];
   NSMutableArray *array = [NSMutableArray array];
      for (NSTextCheckingResult *match in matches) {
          NSRange matchRange = [match range];
          NSString *a = [self substringWithRange:matchRange];
          [array addObject:a];
   }
第三步
 NSMutableAttributedString *nameString = [[NSMutableAttributedString alloc]initWithString:self];
    for (int i = 0; i < self.length; i++) {
        for (NSString *item in itemArr) {
            NSString *str = [self substringWithRange:NSMakeRange(i, item.length)];
            if ([item isEqualToString:str]) {
                [nameString addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(i, item.length)];
                i = i + (int)(item.length) - 1;
            }
        }
    }

三、总结

我们后台的规则定的是需要改变颜色的字符串是以<p>XX</p>包裹的,所以正则里面的那个都可以换成您们和后台约定的,然后这些方法可以写一个字符串类别,注入到你的工具类中使用。

我用的正则是这个:
 (?<=\\<p>).*?(?=\\<\\/p>)

分为3部分(?<=\\<p>)   &&  .*?   &&   (?=\\<\\/p>)
第一部分左边的这都是固定的(?<=  ,因为< 特殊字符所以前面加一个\\
中间部分代表你改变颜色的内容
右边部分左边的也固定(?=,< 、/特殊字符所以前面加一个\\
上一篇 下一篇

猜你喜欢

热点阅读