首页 > 解决方案 > 如何在 Swift 中更改 UILabel 的文本属性?

问题描述

我已经以编程方式设置了一个 UILabel,我试图通过稍后在 ViewController 中调用的函数更改文本属性,但是当调用该函数时, questionLabel.text 保持默认值“欢迎”。

基本上我想要完成的是:

  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

        } 

有什么建议么?非常感激!

标签: iosswiftxcodeuilabelviewcontroller

解决方案


目前的

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 
}()

推荐阅读