代码之家  ›  专栏  ›  技术社区  ›  fuzzygoat

使用addAttribute修改整个NSMutableAttributedString:

  •  5
  • fuzzygoat  · 技术社区  · 13 年前

    我正在寻找一种方法,将句子中的第一个单词涂成与句子其余部分不同的颜色。 方法_001 首先将整个字符串着色为白色,然后将前8个字符重新着色为红色。 方法_002 在使用字符串长度计算剩余字符并将其涂成白色之前,将前8个字符涂成红色。

    方法_001 绝对是最好的,但我很好奇是否有更简单的方法,我希望能找到 NSMutableAttributedString addAttribute: 它没有取值范围,只是将属性应用于整个字符串,对 NSMutableAttributedString 要求您指定一个范围,我是不是遗漏了什么?

    注: 代码包括硬编码值,以提高可读性。

    // METHOD_001
    NSMutableAttributedString *attrString_001 = [[NSMutableAttributedString alloc] initWithString:@"Distance 1720 mm" attributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
    [attrString_001 addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 8)];
    [[self nameLabel] setAttributedText:attrString_001];
    
    // METHOD_002
    NSString *string = @"Distance 1720 mm";
    NSUInteger stringLength = [string length];
    NSMutableAttributedString *attrString_002 = [[NSMutableAttributedString alloc] initWithString:string];
    [attrString_002 addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 8)];
    [attrString_002 addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(9, (stringLength-9))];
    [[self distanceLabel] setAttributedText:attrString_002];
    
    1 回复  |  直到 13 年前
        1
  •  6
  •   guenis    13 年前

    事实上,有一种非常简单的方法可以做到这一点。即使您为标签设置了属性文本,首先它会由标签的常规属性进行样式化,然后您的属性字符串会覆盖相应的属性。所以如果你这样做了 [distanceLabel setTextColor:[UIColor whiteColor]] 事先(在故事板或代码中),您可以使用attr只对需要的部分重新着色。琴弦,达到你想要的效果。