Подтвердить что ты не робот

Измените текст атрибута UILabel без потери форматирования?

В раскадровке я компоную набор меток с различными вариантами форматирования.

Тогда я делаю:

label.text = @"Set programmatically";

И все форматирование теряется! Это отлично работает в iOS5.

Должен быть способ просто обновить текстовую строку без перекодирования всего форматирования?!

label.attributedText.string 

доступен только для чтения.

Спасибо заранее.

4b9b3361

Ответ 1

Приписанная строка содержит все данные форматирования. Метка вообще ничего не знает о форматах.

Вы могли бы сохранить атрибуты в виде отдельного словаря, а затем, когда вы измените атрибут string, вы можете использовать:

[[NSAttributedString alloc] initWithString:@"" attributes:attributes range:range];

Единственный другой вариант - снова создать атрибуты.

Ответ 2

Вы можете извлечь атрибуты в качестве словаря с помощью:

NSDictionary *attributes = [(NSAttributedString *)label.attributedText attributesAtIndex:0 effectiveRange:NULL];

Затем добавьте их обратно с новым текстом:

label.attributedText = [[NSAttributedString alloc] initWithString:@"Some text" attributes:attributes];

Это предполагает, что в нем есть текст, иначе вы потерпите крах, поэтому вам, вероятно, следует сначала выполнить проверку:

if ([self.label.attributedText length]) {...}

Ответ 3

Хотя я новичок в программировании на iOS, я очень быстро столкнулся с одной и той же проблемой. В iOS, мой опыт заключается в том, что

  • Проблема Lewis42 возникает последовательно
  • Предложение josef об извлечении и повторном применении атрибутов не работает: возвращается словарь с нулевыми атрибутами.

Оглядевшись вокруг s/o, я наткнулся на This Post и последовал этой рекомендации, я в конечном итоге использовал это:

- (NSMutableAttributedString *)SetLabelAttributes:(NSString *)input col:(UIColor *)col size:(Size)size {

NSMutableAttributedString *labelAttributes = [[NSMutableAttributedString alloc] initWithString:input];

UIFont *font=[UIFont fontWithName:@"Helvetica Neue" size:size];

NSMutableParagraphStyle* style = [NSMutableParagraphStyle new];
style.alignment = NSTextAlignmentCenter;

[labelAttributes addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, labelAttributes.length)];
[labelAttributes addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, labelAttributes.length)];
[labelAttributes addAttribute:NSForegroundColorAttributeName value:col range:NSMakeRange(0, labelAttributes.length)];

return labelAttributes;