swift - Overriding UILabel text getter not working
问题描述
I am using Storyboards and I'd like to have some labels which always show a given emoji at the start of the label.
I have the following code:
import UIKit
import CocoaLumberjack
class PITLabel: UILabel {
override public var text: String? {
set {
super.text = newValue?.prependedWithGenderEmoji()
DDLogDebug(" set super.text: \(super.text ?? "")")
}
get {
let newVal = super.text?.prependedWithGenderEmoji()
DDLogDebug(" get super.text: \(newVal ?? "")")
return newVal
}
}
override public var attributedText: NSAttributedString? {
set {
super.attributedText = newValue
DDLogDebug(" set super.attributed: \(super.attributedText ?? NSAttributedString(string: ""))")
}
get {
let genderString = super.attributedText?.string.prependedWithGenderEmoji()
let rangePointer = UnsafeMutablePointer<NSRange>.allocate(capacity: 8)
rangePointer.pointee = NSMakeRange(0, 1)
let originalAttributes = super.attributedText?.attributes(at: 0, effectiveRange: rangePointer)
let newAttributedString = NSAttributedString(string: genderString!, attributes: originalAttributes)
DDLogDebug(" get super.attributed: \(newAttributedString)")
return newAttributedString
}
}
}
And I've set the labels to class PITLabel
in the Storyboard.
When the app is run the following is present in the console output:
get super.text: ♂️ PiT SETTINGS
get super.attributed: ♂️ PiT SETTINGS{
NSColor = "UIExtendedSRGBColorSpace 0.0352941 0.498039 0.662745 1";
<snip>
}
This is as expected.
But in the UI of the app it does not show the emoji.
What am I missing?
解决方案
因为您实际上并没有将其添加到文本中。它应该是:
override public var text: String? {
set {
let result = newValue.prependedWithGenderEmoji()
super.text = result
}
get {
return super.text
}
}
在 Interface Builder 中设置文本不会调用text
您覆盖的设置器。您必须在代码中设置它。
yourPitLabel.text = "PiT SETTING
推荐阅读
- android - Recyclerview 仅显示第一个值
- python - Twitter 使用 Selenium Python 向下滚动所有帖子
- java - spring-boot用jackson改变json响应结构
- karate - 在空手道 DSL 中,有没有办法为“给定”步骤定义自定义关键字
- javascript - Node.js 异步/等待不工作
- django - 访问 Python 列表
- oracle12c - 使用 Corda Enterprise Database Manager 工具迁移到 Oracle 无法连接
- machine-learning - CNN 中先前的 Activation Map 如何影响下一个 Activation Map
- c# - Asp.Net Core 2.x HttpContext.Current 不可用
- typo3 - 如何在 Typo3 多个子域中使用登录会话?