更改UILabel文本,但保留其余的属性

我在使用故事板创建的ViewController中有一个UILabel。 标签文本的字体,大小和颜色,对齐方式 - 全部在故事板中设置。 故事板中的标签连接到我的文件中名为p_patientNameLbl的插座。

现在我试图以编程方式更改标签的文本,如下所示:

[self.p_patientNameLbl setText:@"Vasya"];

我看不到新的文字,直到我意识到故事板中的原始标签在黑色背景上是白色的,但显然在我如上所述更改标签的文本之后,所有字体属性都已重置,现在它是黑​​色文本黑色的背景,因此没有见过。 一旦我以编程方式设置颜色:

[self.p_patientNameLbl setTextColor:[UIColor whiteColor]];

我可以看到新的标签,但其余的字体属性和对齐仍然是错误的。

有没有办法只改变标签的文本,而没有以编程方式设置所有其他属性? 我会想象一定有办法,因为我不想在代码中格式化我的接口!


发生这种情况的原因是,您要让“界面”构建器采用在其文本上设置了预定义属性的标签,并用纯文本替换此属性文本。 您必须使用setAttributedText并指定您希望传递给属性字符串的属性,而不是setTextsetTextColor

以下是如何以编程方式将属性字符串应用于标签的示例。 我没有意识到任何更好的方法,但是使用这种方法,您可以对文本或文本颜色进行更改,并且只要您设置了其他属性,所有更改都将正确应用。

[myLabel setAttributedText:[self myLabelAttributes:@"Some awesome text!"]];

....................

- (NSMutableAttributedString *)myLabelAttributes:(NSString *)input
{
    NSMutableAttributedString *labelAttributes = [[NSMutableAttributedString alloc] initWithString:input];

    [labelAttributes addAttribute:NSStrokeWidthAttributeName value:[NSNumber numberWithFloat:-5.0] range:NSMakeRange(0, labelAttributes.length)];
    [labelAttributes addAttribute:NSStrokeColorAttributeName value:[UIColor blackColor] range:NSMakeRange(0, labelAttributes.length)];
    [labelAttributes addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, labelAttributes.length)];

    return labelAttributes;
}

这适用于我:

- (void)setText:(NSString *)text withExistingAttributesInLabel:(UILabel *)label {

    // Check label has existing text
    if ([label.attributedText length]) {

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

        // Set new text with extracted attributes
        label.attributedText = [[NSAttributedString alloc] initWithString:text attributes:attributes];

    }

}

...

[self setText:@"Some text" withExistingAttributesInLabel:self.aLabel];

Swift中的一行实现:

label.attributedText = NSAttributedString(string: "text", attributes: label.attributedText!.attributesAtIndex(0, effectiveRange: nil))
链接地址: http://www.djcxy.com/p/96243.html

上一篇: Changing UILabel text but keeping the rest of the attributes

下一篇: Blinking effect on UILabel