【问题标题】:Problem when changing a label by pressing some buttons通过按某些按钮更改标签时出现问题
【发布时间】:2021-05-24 02:47:06
【问题描述】:

我有 5 个按钮和一个标签。当您按下其中一个按钮时,其各自的文本会出现在标签上。当你再次按下按钮时,标签会清除文本。

我已经在下面的代码中完成了。问题是我也想要这样,当您按下另一个按钮时(而您按下的前一个按钮的文本仍在标签上)该按钮的文本出现在标签上。

这就是我现在拥有的:

@IBOutlet weak var button1: UIButton!
@IBOutlet weak var button2: UIButton!
@IBOutlet weak var button3: UIButton!

@IBOutlet var agressionSelected: UILabel!
var buttonHasNoText: Bool = true

@IBAction func agressionBtnTapped(_ sender: UIButton) {
 
    switch sender.tag {
    case 1:
        if buttonHasNoText {
            agressionSelected.text = "Button 1 pressed"
            buttonHasNoText = false
        } else {
            agressionSelected.text = ""
            buttonHasNoText = true
        }
    case 2:
        if buttonHasNoText {
            agressionSelected.text = "Button 2 pressed"
            buttonHasNoText = false
        } else {
            agressionSelected.text = ""
            buttonHasNoText = true
        }
    case 3:
        if buttonHasNoText {
            agressionSelected.text = "Button 3 pressed"
            buttonHasNoText = false
        } else {
            agressionSelected.text = ""
            buttonHasNoText = true
        }
    default:
        agressionSelected.text = ""
    }
}

我读过有类似问题的人,但他们与这个不太匹配,我一直在尝试没有任何结果。我是编码新手,我不知道我是否遗漏了一些基本的东西。

提前致谢!

【问题讨论】:

  • 两个问题清楚。按钮 1 被按下并且当前显示在标签上。接下来,按下按钮 2。 (1) 您想追加标签上显示的内容吗?另外,在单独的行上?接下来,假设按下按钮 1、2 或 3 -问题 1 之后。期望的结果是什么? (2) 替换所有内容,根据按下的按钮进行编辑,或附加 - 在按下按钮 3 的情况下。如何做到这一点相当简单,但你想要的对我来说并不明显。
  • 是的,对不起。当您按下按钮时,您会在标签中显示其文本。如果您没有再次触摸该按钮以删除文本,而是按下另一个按钮,则其他按钮文本将附加到标签。
  • 我写的答案比你已经接受的要长 - 如果按钮触摸的顺序是 1,然后是 2,然后是 3,然后是 2,你想要什么 - 但看起来你已经有了一个很好的答案足够的答案。好!

标签: swift xcode button label


【解决方案1】:

就代码的基本修改而言,您可以检查当前标签文本是否等于您尝试将其设置为的文本。如果不是,您更改文本。如果是这样,请将其更改为空:

switch sender.tag {
        case 1:
            if agressionSelected.text == "Button 1 pressed" {
                agressionSelected.text = ""
            } else {
                agressionSelected.text = "Button 1 pressed"
            }
        case 2:
            if agressionSelected.text == "Button 2 pressed" {
                agressionSelected.text = ""
            } else {
                agressionSelected.text = "Button 3 pressed"
            }
        case 3:
            if agressionSelected.text == "Button 3 pressed" {
                agressionSelected.text = ""
            } else {
                agressionSelected.text = "Button 3 pressed"
            }
        default:
            agressionSelected.text = ""
        }

您可以通过以下方式减少代码的重复性:

let tagsToText = [1:"Button 1 Pressed", 2: "Button 2 Pressed", 3: "Button 3 Pressed"]
if agressionSelected.text == tagsToText[sender.tag] {
  agressionSelected.text = ""
} else {
  agressionSelected.text = tagsToText[sender.tag] ?? ""
}

在这个版本中,您有一个包含标签及其对应文本的字典。同样,如果文本已设置为该值,则标签将重置为空。如果文本不同,则将其设置为新值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多