小编典典

你如何使用 NSAttributedString?

all

NSString一个或多个颜色NSMutableStrings是不可能的。所以我听说了一些关于 iPad SDK 3.2* (或大约
3.2)
NSAttributedString

引入的内容,并且从 iPhone SDK 4.0 beta 开始在 iPhone 上可用。
***

我想要一个具有三种颜色的字符串。

我不使用 3 个单独的 NSStrings
的原因是因为三个NSAttributedString子字符串中的每一个的长度经常变化,所以我宁愿不使用任何计算来重新定位 3
个单独的NSString对象。

如果可以使用NSAttributedString我如何进行以下操作 - (如果无法使用 NSAttributed 字符串,您将如何做):

替代文字

编辑: 请记住,@"first"@"second"@"third"随时被其他字符串替换。所以使用硬编码的 NSRange
值是行不通的。


阅读 74

收藏
2022-04-14

共1个答案

小编典典

在构建属性字符串时,我更喜欢使用可变子类,只是为了让事情更整洁。

话虽如此,以下是创建三色属性字符串的方法:

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"firstsecondthird"];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];

在浏览器中输入。 警告实施者

显然,您不会在这样的范围内进行硬编码。也许相反,您可以执行以下操作:

NSDictionary *wordToColorMapping = ....;  //an NSDictionary of NSString => UIColor pairs
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@""];
for (NSString *word in wordToColorMapping) {
  UIColor *color = [wordToColorMapping objectForKey:word];
  NSDictionary *attributes = [NSDictionary dictionaryWithObject:color forKey:NSForegroundColorAttributeName];
  NSAttributedString *subString = [[NSAttributedString alloc] initWithString:word attributes:attributes];
  [string appendAttributedString:subString];
  [subString release];
}

//display string
2022-04-14