我已经以编程方式设置了一个 UILabel,并且尝试通过稍后在 ViewController 中调用的函数来更改文本属性,但是当调用该函数时,questionLabel.text 保持默认值“Welcome”。
本质上我想要完成的是:
func changeLabelText() {
questionLabel.text = "New label text"
print(questionLabel.text!)
}
changeLabelText()
// prints "New label text"
但是我实际得到的是:
func changeLabelText() {
questionLabel.text = "New label text"
print(questionLabel.text!)
}
changeLabelText()
// prints "Welcome"
这就是我的标签的设置方式:
class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {
@IBOutlet var cameraView: UIView!
var questionLabel: UILabel {
let label = UILabel()
label.lineBreakMode = .byWordWrapping
label.backgroundColor = .white
label.textColor = .black
label.text = "Welcome"
label.textAlignment = .center
label.frame = CGRect(x: 65, y: 100, width: 300, height: 65)
return label
}
有什么建议吗?非常感谢!
最佳答案
当前
var questionLabel: UILabel {
let label = UILabel()
label.lineBreakMode = .byWordWrapping
label.backgroundColor = .white
label.textColor = .black
label.text = "Welcome"
label.textAlignment = .center
label.frame = CGRect(x: 65, y: 100, width: 300, height: 65)
return label
}
是一个计算属性,因此每次访问都会获得一个新的单独实例
questionLabel.text = "New label text" // instance 1
print(questionLabel.text!) // instance 2
相反,你需要一个闭包
var questionLabel: UILabel = {
let label = UILabel()
label.lineBreakMode = .byWordWrapping
label.backgroundColor = .white
label.textColor = .black
label.text = "Welcome"
label.textAlignment = .center
label.frame = CGRect(x: 65, y: 100, width: 300, height: 65)
return label
}()
关于ios - 如何在 Swift 中更改 UILabel 的文本属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59381521/