更改UILabel文本,但保留其余的属性
我在使用故事板创建的ViewController中有一个UILabel。 标签文本的字体,大小和颜色,对齐方式 - 全部在故事板中设置。 故事板中的标签连接到我的文件中名为p_patientNameLbl的插座。
现在我试图以编程方式更改标签的文本,如下所示:
[self.p_patientNameLbl setText:@"Vasya"];
我看不到新的文字,直到我意识到故事板中的原始标签在黑色背景上是白色的,但显然在我如上所述更改标签的文本之后,所有字体属性都已重置,现在它是黑色文本黑色的背景,因此没有见过。 一旦我以编程方式设置颜色:
[self.p_patientNameLbl setTextColor:[UIColor whiteColor]];
我可以看到新的标签,但其余的字体属性和对齐仍然是错误的。
有没有办法只改变标签的文本,而没有以编程方式设置所有其他属性? 我会想象一定有办法,因为我不想在代码中格式化我的接口!
发生这种情况的原因是,您要让“界面”构建器采用在其文本上设置了预定义属性的标签,并用纯文本替换此属性文本。 您必须使用setAttributedText
并指定您希望传递给属性字符串的属性,而不是setText
或setTextColor
。
以下是如何以编程方式将属性字符串应用于标签的示例。 我没有意识到任何更好的方法,但是使用这种方法,您可以对文本或文本颜色进行更改,并且只要您设置了其他属性,所有更改都将正确应用。
[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