更改属性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中,我的经验是这样的
- 刘易斯42的问题一贯发生
- 约瑟夫的提取和重新应用属性的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;