(我对编程非常陌生,所以非常感谢外行友好的答案)
我正在与两支队伍进行比赛。我有一个按钮,可以检查哪个团队正在运行,然后更新该团队的分数。代码运行时没有错误,但按下按钮时分数不会更新。
在我的模型文件中,我声明了
var teamOneScore = 0
var teamTwoScore = 0
var teamCounter = 2
在视图控制器中我有
@IBAction func buttonPressed(sender: AnyObject) {
if timer.valid && teamCounter % 2 == 0 {
++teamOneScore
} else if timer.valid && teamCounter % 2 != 0 {
++teamTwoScore
}
}
在viewDidLoad
中 if teamCounter % 2 == 0 {
scoreLabel.text = "Score: \(teamOneScore)"
} else {
scoreLabel.text = "Score: \(teamTwoScore)"
}
当视图加载时,scoreLabel会正确显示0,但是当我按下按钮时,显示的分数不会上升。计时器和teamCounter检查在代码中的其他任何地方工作正常,我有另一个按钮,增加teamCounter(它也作为模型中的int存储)没有问题。所以buttonPressed的所有单独组件似乎工作正常,我没有任何错误继续下去。我很难过。
答案 0 :(得分:1)
在scoreLabel
中创建viewDidLoad
时,您可以为其指定"Score: \(teamOneScore)"
的文本值,这很棒。但是,当您增加teamOneScore
变量时,实际的UILabel
无法更改其text
。它假设您要显示Score: 0
。即使变量的值已更改,该标签也已创建,并将继续显示已初始化的文本。
您需要在buttonPressed
功能中添加
scoreLabel.text = "Score: \(teamOneScore)"
或
scoreLabel.text = "Score: \(teamOneScore)"
如果是得分的第2队。
增加分数后。这是允许标签文本实际更改的原因。
答案 1 :(得分:1)
您必须使用额外方法移动文本设置。现在文本只在viewDidLoad中设置 - 但是该函数不会被多次触发。
将viewDidLoad更改为
updateUI()
添加新功能
func updateUI() {
if teamCounter % 2 == 0 {
scoreLabel.text = "Score: \(teamOneScore)"
} else {
scoreLabel.text = "Score: \(teamTwoScore)"
}
}
并将该方法称为按钮操作中的最后一项:
@IBAction func buttonPressed(sender: AnyObject) {
if timer.valid && teamCounter % 2 == 0 {
++teamOneScore
} else if timer.valid && teamCounter % 2 != 0 {
++teamTwoScore
}
updateUI()
}