按钮没有改变一个值?

Button is not changing a value?

我写了一段代码来创建一个 Button,它应该改变 label/textfield 的值。 我想制作一个俯卧撑应用程序,每次您触摸屏幕上的按钮时,标签“您的分数:0”都会将分数增加 1,我也尝试将其用作文本字段。但它不起作用,什么也没有发生! 有人可以帮助我吗?

标签代码:

func setupHelloWorld() {
        helloworld.textAlignment = .center
        helloworld.text = "Your Score: \(score)"
        helloworld.textColor = .gray
        helloworld.font = .boldSystemFont(ofSize: 30)
        self.view.addSubview(helloworld)
        

...

按钮代码:

func setUpNetButton() {
        nextButton.backgroundColor = .blue
        nextButton.setTitleColor(.white, for: .normal)
        nextButton.setTitle("Tap!", for: .normal)
        
        nextButton.addTarget(self, action: #selector(nextButtonTapped), for: .touchUpInside)
        
        
        view.addSubview(nextButton)
        setUpNextButtonConstraints()
    }
    
    @objc func nextButtonTapped() {
        score += 1
}

这是因为你没有改变helloworld的值赋值给 helloworld.text @objc 函数 nextButtonTapped() 分数更新后

您必须手动更新标签的 text 属性。仅仅因为您最初使用 score 变量设置其文本,除非您明确设置新标签文本,否则它不会自动对之后变量值的任何更改做出反应。

将您的代码更改为类似这样的代码,它将起作用:

func setupHelloWorld() {
        helloworld.textAlignment = .center
        helloworld.textColor = .gray
        helloworld.font = .boldSystemFont(ofSize: 30)
        updateButtonText()
        self.view.addSubview(helloworld)
}
...
@objc func nextButtonTapped() {
        score += 1
        updateButtonText()
}

func updateButtonText() {
        helloworld.text = "Your Score: \(score)"
}

或者,您可以向 score 属性 添加一个 didSet 观察器,而不是从 nextButtonTapped() 方法调用 updateButtonText 并更改每次为它分配新值时标记文本。但是,您仍然需要在视图加载后更新标签的文本,因为在 class 的初始化期间不会调用 didSet。像这样:

private var score: Int = 0 {
    didSet {
        updateButtonText()
    }
}

override func viewDidLoad() {
    ...
    updateButtonText()
    ...