【问题标题】:UILabels not updating immediately when triggered from a button push当按钮按下触发时,UILabels 不会立即更新
【发布时间】:2018-08-24 17:18:58
【问题描述】:

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

我们几乎都以完全相同的方式处理这个... ctrl-单击一个按钮并将其拖到代码中,在弹出的弹出窗口中选择“action”,它创建一个函数,当玩家点击按钮。在该函数内部更改一些 HP 并更新与该 HP 关联的标签。像这样的...

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

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

如果他们再次点击,它会更新……但会更新为旧值。所以换句话说,第二次点击更新到第一次点击应该更新到的值,第三次点击更新到第二次应该更新到的值,等等。就像它总是落后一次点击?

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

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

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

有什么想法吗?

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

【问题讨论】:

  • 这听起来像是一个并发问题。 “问题学生”是否有可能尝试从后台线程更新标签?
  • @Duncan C 老实说,甚至不完全确定这意味着什么,但他们以与其他学生相同的方式创建了这个函数,ctrl 单击并拖动并选择“动作”。它适用于大多数其他学生。
  • @DuncanC @IBActions 在主线程上被调用。
  • 如果有人想看,我附上了学生项目的链接。我不知道出了什么问题。

标签: ios swift label


【解决方案1】:

尝试:

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

【讨论】:

  • 这只是给我一个错误:“在调用中缺少参数标签'执行:'”。而“修复它”给了我一个不同的错误:“不能使用类型为 '(execute: ())' 的参数列表调用 'async'
  • 我刚刚编辑并运行了上面的代码,它可以正常工作
  • 该代码现在没有给我一条错误消息,但它仍然无法正常工作。
【解决方案2】:

修复它。

我查看了他旁边其他孩子的项目,最大的不同是他删除了按钮的默认标题文本(他将“不可见”按钮放置在图像视图的顶部,因此单击图像所在的位置也会单击按钮。)

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

在每个按钮的标题文本字段中至少放置一个空格似乎可以解决问题。或者更好的是摆脱图像视图并使用按钮的图像字段。虽然......对于任何阅读此尝试的人,我们也遇到了类似的问题,只有通过将按钮“类型”字段从“自定义”更改(当您添加时自动选择一个图像到按钮的“图像”字段)到“系统”。

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 2022-07-27
    • 1970-01-01
    • 2020-07-28
    • 2021-01-28
    • 1970-01-01
    • 2018-06-11
    • 2011-07-06
    • 1970-01-01
    相关资源
    最近更新 更多