如何从Swift子类大写UILabel的text属性

时间:2018-05-03 12:09:35

标签: ios swift uilabel

我在我的应用程序中为UILabel创建了一个Swift子类,以管理所有视图的样式,以便以后更容易修改样式。我知道要将字符串转换为大写,我可以使用uppercased()来实现它。

然而,问题在于我在uppercased() text属性的子类中使用capitalizedUILabel时,它在运行时不起作用。奇怪的是它在故事板上正确呈现(使用@IBDesignable),但在运行时,它显示了非大写字符串。

例如,我在UILabel子类中有类似的代码:

textColor = ...
font = UIFont(name: "Avenir-Medium", size: 12.0)
text = text!.uppercased()

然后在视图控制器中,我有一个类似于此的代码:

label_noWeightMessage.text = "No weight logs this week..."

除了大小写更改外,正确应用了颜色和字体。我在这里错过了什么吗?

在故事板中,文字显示为“本周没有重量记录......” 但是在运行时的模拟器中,它会恢复原来的情况。

我知道我可以在大写字母中输入文字。但这不是我想要的。我希望能够在所有屏幕上重复使用样式,而无需重新键入所有UILabel文本,只需在一个地方进行更改即可。

谢谢!

1 个答案:

答案 0 :(得分:4)

更改时文本未设置为大写。在被覆盖的didSettext属性的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()
    }
}