Как использовать NSAttributedString?

Несколько цветов в NSString или NSMutableStrings невозможны. Итак, я немного слышал о NSAttributedString , который был представлен в iPad SDK 3.2 (или около 3.2) и доступен на iPhone с iPhone SDK 4.0 beta. .

Я хотел бы иметь строку трех цветов.

Причина, по которой я не использую 3 отдельных NSStrings, заключается в том, что длина каждой из трех NSAttributedString подстрок часто меняется, поэтому я бы предпочел не использовать какие-либо вычисления для изменения положения 3 отдельных Объекты NSString .

Если это возможно с помощью NSAttributedString , как мне сделать следующее - (если это невозможно со строкой NSAttributed, как бы вы это сделали):

alt text

Изменить: Помните, @ "first" , @ "second" и @ "third" будут заменены другими строками в любое время. Поэтому использование жестко запрограммированных значений NSRange не сработает.

305
задан Krunal 12 October 2017 в 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
475
ответ дан 23 November 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: