如何大写来自 Swift 子类的 UILabel 的文本属性
Posted
技术标签:
【中文标题】如何大写来自 Swift 子类的 UILabel 的文本属性【英文标题】:How to uppercase the text property of UILabel from Swift subclass 【发布时间】: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
文本并在一个地方进行更改。
谢谢!
【问题讨论】:
【参考方案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 啊,当然。我创建了一个无限循环。谢谢!以上是关于如何大写来自 Swift 子类的 UILabel 的文本属性的主要内容,如果未能解决你的问题,请参考以下文章
将UILabel子类从Objective-C转换为Swift
Swift UILabel子类自动调用enum switch函数
无法在 Swift 中使用来自 Firebase 的数据立即加载 UIImageView 和 UILabel
swift UILabel中的多行文本(来自http://stackoverflow.com/a/990244/1135737)