【问题标题】:How to uppercase the text property of UILabel from Swift subclass如何大写来自 Swift 子类的 UILabel 的文本属性
【发布时间】:2018-05-03 12:09:34
【问题描述】:

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

但是,当我在 UILabel 文本属性的子类中使用 uppercased()capitalized 时,问题就出在运行时。奇怪的是它在情节提要上正确呈现(使用@IBDesignable),但在运行时,它显示了未大写的字符串。

比如我在UILabel子类中有一个类似这样的代码:

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

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: ios swift uilabel


    【解决方案1】:

    文本更改时未设置为大写。在覆盖的UILabel 中的text 属性的didSet 部分转换为大写。

    如果您想更改通过 Interface Builder 设置文本的标签的文本,请同时覆盖 awakeFromNib

    class CustomLabel: UILabel {
        override var text: String? {
            didSet {
                super.text = text?.uppercased()
            }
        }
    
        override func awakeFromNib() {
            super.awakeFromNib()
    
            super.text = text?.uppercased()
        }
    }
    

    【讨论】:

    • 我认为你需要在你的 didSet 中调用super.text = text?.uppercased()
    • @rbaldwin 啊,当然。我创建了一个无限循环。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    相关资源
    最近更新 更多