如何在目标c中替换属性字符串中的颜色

时间:2018-03-14 12:48:23

标签: objective-c nsattributedstring

在我的属性字符串中有多种颜色。喜欢红色,黑色,绿色的颜色

这里是示例字符串

enter image description here

在这个字符串中,我想将所有红色字替换为黄色。

任何人都可以指导我如何实现这个目标?

谢谢。

1 个答案:

答案 0 :(得分:0)

您需要枚举NSAttributedString并在满足条件时更改属性的值。

文字颜色属性由NSForegroundColorAttributeName完成 attr是与您相对应的NSMutableAttributedString

//Retrieve the current attributedText. You need to make it mutable.
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithAttributedString:yourLabelOrTextView.attributedText]; 

[attr enumerateAttribute:NSForegroundColorAttributeName
                 inRange:NSMakeRange(0, [attr length]) options:0
              usingBlock:^(id  _Nullable value, NSRange range, BOOL * _Nonnull stop) {
                  if ([value isKindOfClass:[UIColor class]]) //Check just in case that the value is really a UIColor
                  {
                      UIColor *currentColor = (UIColor *)value;
                      if ([currentColor isEqual:[UIColor redColor]]) //Condition
                      {
                          [attr addAttribute:NSForegroundColorAttributeName
                                       value:[UIColor yellowColor]
                                       range:range];
                      }
                  }
              }];
[yourLabelOrTextView setAttributedText:attr]; //Replace the previous attributedText on UI with the new one.

你可以删除以前的颜色(红色),然后应用新的颜色,但由于没有必要的单一性,它将替换它。