UILabels在按下按钮时不会立即更新

时间:2018-03-15 18:54:15

标签: ios swift label

我让我的学生做一个基本的按钮点击“战斗”游戏,玩家可以按下按钮来攻击/防守/等等。我的学生需要跟踪玩家和敌人的健康状况,并更新标签上的屏幕随时都有变化。

我们几乎都以同样的方式处理...按住按钮并将其拖动到代码中,在弹出的弹出窗口中选择“动作”,创建一个在执行时执行的功能玩家点击按钮。在该功能内部更改一些HP并更新与该HP关联的标签。像这样......

@IBaction func playerAttacks {
enemyHP -= 30
enemyHPLabel.text = String(enemyHP)
}

9个学生项目中的10个项目始终如一。每隔一段时间,虽然学生的项目根本无法正常工作。单击该按钮不会更新标签。然而,使用print语句我可以看到它已更新,如果我打印出敌人HPLabel.text我得到了新HP。然而,它没有在模拟器上更新。

如果他们再次点击,它会更新...但是更新旧值。换句话说,第二次单击更新为第一次单击应该更新的值,第三次单击更新为第二次应该更新的值,等等。这就像它总是一次点击一样?

在研究这个问题时,我看到人们谈论网络代码并确保在“主”线程中更新标签,但我不确定这是否适用于此?我们没有使用任何花哨的代码,这是非常基本的东西。  无论哪种方式,它对一些学生有效并且对其他学生不起作用是非常令人困惑的。

奇怪的信息,在学生将自己的图像放在按钮上之前我们遇到过这几次,这将其改为“自定义”类型。将其更改回“系统”类型修复它。但是这个学生没有这样做,而且它已经处于“系统”类型。

我们在macOS High Sierra 10.13.2上使用XCode 9.2。所有这些在机器之间完全一致。

有什么想法吗?

/ EDIT如果有人想看看,请附加项目链接:https://drive.google.com/file/d/1IXL6MsoQ4fv6VYRocFeyMmPOMGyu7kUp/view?usp=sharing

2 个答案:

答案 0 :(得分:0)

尝试:

 var enemyHP = 300;
@IBOutlet weak var enemyHPLabel: UILabel!
@IBAction func playerAttacks() {
    enemyHP -= 30
    DispatchQueue.main.async {
        self.enemyHPLabel.text = String(self.enemyHP)
    }
}

答案 1 :(得分:0)

修正了它。

我看着他旁边的其他孩子的项目,最大的区别是他删除了他的按钮的默认标题文本(他在图像视图顶部放置"隐形"按钮所以单击图像所在的位置也会单击按钮。)

为什么这会导致这个奇怪的问题我不知道,但我只是在文本字段中添加和删除文本以及测试两种方式来回来回,这肯定是问题。

在每个按钮的标题文本字段中至少放置一个空格似乎可以修复它。或者更好的是摆脱图像视图并使用按钮的图像字段。尽管如此......对于那些尝试这种情况的人来说,我们也有类似的问题也是这样做的,只有通过更改按钮才能解决问题。#34;键入"来自" custom" (将图像添加到"图像"按钮字段时自动选择)到#34; system"。