Swift 调用didSet时UILabel.text未更新
每次外部类收到更新时,我都尝试更新Swift 调用didSet时UILabel.text未更新,swift,Swift,每次外部类收到更新时,我都尝试更新UILabel(通过IB分配的自定义类,显示在多个视图控制器上): class CoinsLabel: UILabel { override init(frame: CGRect) { super.init(frame: frame) } required init?(coder: NSCoder) { super.init(coder: coder) } var coins
UILabel
(通过IB分配的自定义类,显示在多个视图控制器上):
class CoinsLabel: UILabel {
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
var coins: Int = 0 {
didSet {
print("Received update")
self.text = "\(coins)"
}
}
}
作为对ViewController的测试,我有:
@IBAction func go () {
CoinsLabel().coins = 1
}
调用打印行,但标签文本不更改 在
ViewController
类中,IB引用看起来像
@IBAOutlet weak var coinLabel: CoinsLabel!
在按钮操作中,您可以简单地使用:
@IBAction func go () {
coinLabel.coins = 1 // Not CoinsLabel()
}
您还可以设置不带IB参考的自定义标签,如下所示:
let coinLabel = CoinsLabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
coinLabel.coins = 1
view.addSubView(coinLabel)
这将在主视图中添加标签。您需要设置标签框以调整到所需的视图
希望您理解。我可以在不设置IB插座的情况下执行此操作吗?ViewController只是一个测试,硬币数量的变化实际上是由另一个类完成的。coinlabel显示在多个视图控制器中。这需要我将@IBAOutlet添加到每个视图控制器中,而不是我当前的方法,在接口生成器中,我只是将自定义类分配给它。下面的投票是怎么回事!?