Swift - 更新UILabel可防止子视图更改

时间:2018-05-18 17:31:04

标签: ios swift uilabel subview

我目前正在学习Swift和斯坦福大学的iOS 11课程。其中一个项目是名为" Set"的纸牌游戏。对于那个项目,我有一个名为" cardView"在ViewController中,显示该字段上的所有卡片。 在那里" cardView"我为每张卡创建一个子视图。 目标是找到组成" set" 3的3张卡片 我还有一个提示按钮,它通过改变组成"设置"的3张卡的颜色向我展示了一种可能的解决方案。
每次我点击那个提示按钮,虽然我的分数会降低。

这是我的IBAction:

@IBAction private func hintButtonPressed(_ sender: UIButton) {
    for subview in cardView.subviews {
        subview.layer.borderWidth = 0
    }
    game.hint()
    if !game.selectedCards.isEmpty {
        for index in game.indicesOfSelectedCards {
            cardView.subviews[index].layer.borderWidth = 4
            cardView.subviews[index].layer.cornerRadius = 8
            cardView.subviews[index].layer.borderColor = UIColor.red.cgColor
            print("cardView.subview[\(index)] changed borderColor.")
        }
        game.resetSelectedCards()
    } else {
        print("There are no sets on the field")
    }
    scoreLabel.text = "Score: \(game.score)"
}

出于某种原因,如果我更改了scoreLabel的文本,则构成" set"的子视图/卡片。没有更新,我看不到边界的任何变化。
如果我删除这一行 scoreLabel.text = "Score: \(game.score)"虽然我可以看到子视图的更改,但后来我看不到我更新的分数了...

我还使用断点来弄清楚这个bug出现在哪一行上,并且我发现只要我在那里改变了scoreLabel的文本,我的子视图就不会改变,即使该行是在该方法的结束。

我无法弄清楚如何更新分数+同时显示可能的解决方案。

任何人都可以帮助我吗?

0 个答案:

没有答案