按下某些按钮改变标签时出现问题



我有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 = ""
}
}

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

提前感谢!

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

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] ?? ""
}

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

最新更新