按钮没有改变一个值?
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()
...
我写了一段代码来创建一个 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()
...