【发布时间】:2022-07-19 21:31:27
【问题描述】:
大家好,我正在创建一个自定义文本标签,但我无法从视图控制器更改标签文本,所以我需要帮助。
我的自定义文本标签 swift 文件中有代码:
import UIKit
class LinkLabel: UILabel {
private var labelFirstText: String? = "First Text"
private var labelSecondText: String? = "Second Text"
var firstLabel: String? {
didSet {
self.labelFirstText = firstLabel
}
}
var secondLabel: String? {
didSet {
self.labelSecondText = secondLabel
}
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setupLabel()
self.setNeedsDisplay()
}
@objc
private func setupLabel() {
let firstTextNSA = [NSAttributedString.Key.font:
UIFont.systemFont(ofSize: 15, weight: .medium),
NSAttributedString.Key.foregroundColor: UIColor.secondaryTextColor]
let secondTextNSA = [NSAttributedString.Key.font:
UIFont.systemFont(ofSize: 15, weight: .medium),
NSAttributedString.Key.foregroundColor: UIColor.appPurple]
let attributedString1 = NSMutableAttributedString(string: labelFirstText ?? "First Label" + " ", attributes: firstTextNSA)
let attributedString2 = NSMutableAttributedString(string: labelSecondText ?? "Second Label", attributes: secondTextNSA)
attributedString1.append(attributedString2)
self.attributedText = attributedString1
}
}
还有我的视图控制器:
import UIKit
class ViewController: UIViewController {
@IBOutlet private weak var signInLabel: LinkLabel!
// MARK: - Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
signInLabel.firstLabel = "Already have an account?"
signInLabel.secondLabel = "Sign in now"
}
}
现在一切正常,但我无法更改标签文本。我编写打印函数来记录发生的事情,看看 didset 何时运行,labelFirstText 是“已经有一个帐户?”但是当 init 函数运行 labelFirstText 时采用默认值。我不明白我该如何解决这个问题。
【问题讨论】:
-
init是让您初始化LinkLabel实例的函数,它发生在您更改firstLabel或secondLabel之前。
标签: ios swift nsattributedstring