5

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

METHOD_001绝对是最好的,但我很好奇是否有更简单的方法,我期待找到一个NSMutableAttributedString addAttribute:不占用范围并将属性应用于整个字符串的方法,所有修改似乎有点疏忽aNSMutableAttributedString要求你指定一个范围,我错过了什么吗?

注意: 代码包含硬编码值以提高可读性。

// 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];
4

1 回答 1

6

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

于 2013-04-14T14:40:29.260 回答