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

时间:2012-10-03 10:03:59

标签: iphone ios xcode ios6

在故事板中,我使用各种格式选项布局一组标签。

然后我这样做:

label.text = @"Set programmatically";

所有格式都丢失了!这在iOS5中运行良好。

必须有一种方法只更新文本字符串而不重新编码所有格式?!

label.attributedText.string 

是只读的。

提前致谢。

3 个答案:

答案 0 :(得分:29)

您可以使用以下内容将属性提取为字典:

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

然后用新文本添加它们:

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

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

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

答案 1 :(得分:4)

attributionString包含其所有格式数据。标签根本不了解格式。

您可以将属性存储为单独的字典,然后在更改attributesString时可以使用:

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

唯一的另一个选择是重新构建属性。

答案 2 :(得分:4)

虽然是iOS编程的新手,但我很快就遇到了同样的问题。在iOS中,我的经验是

  1. Lewis42的问题始终存在
  2. josef建议提取和重新应用属性 不起作用:返回空属性字典。
  3. 浏览了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;