如何大写 Swift 子类中 UILabel 的文本属性

Cri*_*pol 0 uilabel ios swift

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

但是,问题在于当我在text 属性的子类中使用uppercased()或时,它在运行时不起作用。奇怪的是它在情节提要上正确呈现(使用),但在运行时,它显示了未大写的字符串。capitalizedUILabel@IBDesignable

例如,我在UILabel子类中有一段与此类似的代码:

textColor = ...
font = UIFont(name: "Avenir-Medium", size: 12.0)
text = text!.uppercased()
Run Code Online (Sandbox Code Playgroud)

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

label_noWeightMessage.text = "No weight logs this week..."
Run Code Online (Sandbox Code Playgroud)

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

在故事板中,文本显示为“NO WEIGHT LOGS THIS WEEK...”但在运行时的模拟器中,它恢复到原始情况。

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

谢谢!

Tam*_*gel 7

文本更改时不会设置为大写。转换为大写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()
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为您需要在 didSet 中调用 `super.text = text?.uppercased()` (3认同)