使用addAttribute修改整个NSMutableAttributedString:

时间:2013-04-10 16:42:49

标签: iphone cocoa-touch uicolor

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

METHOD_001 绝对是最好的,但我很好奇,如果有一种更简单的方法,我希望找到一个没有范围的NSMutableAttributedString addAttribute:,只是应用了属性整个字符串,似乎有点疏忽所有对NSMutableAttributedString的修改都要求你指定一个范围,我错过了什么?

NB: 代码包含硬编码值以帮助提高可读性。

// 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 个答案:

答案 0 :(得分:6)

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