更改属性UILabel的文本,而不会丢失格式?

在故事板中,我布置了一系列具有各种格式选项的标签。

那我呢:

label.text = @"Set programmatically"; 

所有的格式都丢失了! 这在iOS5中正常工作。

必须有一种更新文本string的方式,而不用重新编码所有的格式?

 label.attributedText.string 

是只读的。

提前致谢。

一个归属的string包含所有的格式化数据。 标签根本不知道有关格式的任何信息。

你可能将属性存储为一个单独的字典,然后当你改变的时候你可以使用:

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

唯一的其他select是再次build立属性。

您可以使用以下字典作为字典提取属性:

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

然后将它们添加回新的文本:

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

这假定标签中有文字,否则你会崩溃,所以你应该首先检查一下:

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

尽pipe对于iOS编程来说,我很快遇到了同样的问题。 在iOS中,我的经验是这样的

  1. 刘易斯42的问题一贯发生
  2. 约瑟夫的提取和重新应用属性的build议不起作用:返回一个空属性字典。

看过周围的东西,我碰到了这个post,并按照这个build议,我最终使用了这个:

 - (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;