我在我的应用程序中为UILabel
创建了一个Swift子类,以管理所有视图的样式,以便以后更容易修改样式。我知道要将字符串转换为大写,我可以使用uppercased()
来实现它。
然而,问题在于我在uppercased()
text属性的子类中使用capitalized
或UILabel
时,它在运行时不起作用。奇怪的是它在故事板上正确呈现(使用@IBDesignable
),但在运行时,它显示了非大写字符串。
例如,我在UILabel
子类中有类似的代码:
textColor = ...
font = UIFont(name: "Avenir-Medium", size: 12.0)
text = text!.uppercased()
然后在视图控制器中,我有一个类似于此的代码:
label_noWeightMessage.text = "No weight logs this week..."
除了大小写更改外,正确应用了颜色和字体。我在这里错过了什么吗?
在故事板中,文字显示为“本周没有重量记录......” 但是在运行时的模拟器中,它会恢复原来的情况。
我知道我可以在大写字母中输入文字。但这不是我想要的。我希望能够在所有屏幕上重复使用样式,而无需重新键入所有UILabel
文本,只需在一个地方进行更改即可。
谢谢!
答案 0 :(得分:4)
更改时文本未设置为大写。在被覆盖的didSet
中text
属性的UILabel
部分中转换为大写。
如果要更改通过Interface Builder设置文本的标签的文本,请覆盖awakeFromNib
:
class CustomLabel: UILabel {
override var text: String? {
didSet {
super.text = text?.uppercased()
}
}
override func awakeFromNib() {
super.awakeFromNib()
super.text = text?.uppercased()
}
}