按下其他连续按钮时如何取消选择按钮?
Posted
技术标签:
【中文标题】按下其他连续按钮时如何取消选择按钮?【英文标题】:How can I deselect a button when other consecutive button is pressed? 【发布时间】:2021-07-16 07:50:07 【问题描述】:我正在创建一个有5个按钮的测试,每个按钮对应一种特定的颜色,问题是当我选择连续的第二个按钮时,前一个按钮仍然被选中,我怎样才能让我的代码只选择一个一次按钮并取消选择上一个按钮?
我该如何解决这个问题?
这是我的代码
class ViewController: UIViewController
var buttonPressed: Bool = false
@IBOutlet weak var button1: UIButton!
@IBAction func buttonAction1(_ sender: UIButton)
if buttonPressed
buttonPressed = false
button1.setImage(UIImage(named: "Bolinha-5"), for: .normal)
else
buttonPressed = true
button1.setImage(UIImage(named: "Bolinha-4"), for: .normal)
@IBOutlet weak var button2: UIButton!
@IBAction func buttonAction2(_ sender: UIButton)
if buttonPressed
buttonPressed = false
button2.setImage(UIImage(named: "Bolinha-5"), for: .normal)
else
buttonPressed = true
button2.setImage(UIImage(named: "Bolinha-4"), for: .normal)
@IBOutlet weak var button3: UIButton!
@IBAction func buttonAction3(_ sender: UIButton)
if buttonPressed
buttonPressed = false
button3.setImage(UIImage(named: "Bolinha-2"), for: .normal)
else
buttonPressed = true
button3.setImage(UIImage(named: "Bolinha-4"), for: .normal)
@IBOutlet weak var button4: UIButton!
@IBAction func buttonAction4(_ sender: UIButton)
if buttonPressed
buttonPressed = false
button4.setImage(UIImage(named: "Bolinha-3"), for: .normal)
else
buttonPressed = true
button4.setImage(UIImage(named: "Bolinha-4"), for: .normal)
@IBOutlet weak var button5: UIButton!
@IBAction func buttonAction5(_ sender: UIButton)
if buttonPressed
buttonPressed = false
button5.setImage(UIImage(named: "Bolinha-3"), for: .normal)
else
buttonPressed = true
button5.setImage(UIImage(named: "Bolinha-4"), for: .normal)
【问题讨论】:
看起来像简单的错别字:你在button1.setImage
in buttonAction5
etc.
谢谢!我没注意到
是的,我确实注意到了。但是您实际上并没有在您的 IBAction
方法中引用这些网点。比如buttonAction5
,你还是说button1.setImage
,所以它设置了button1
的形象。哦,我刚刚注意到,如果你想单独控制它们,你还需要 5 个不同的 buttonPressed
变量。您可能需要考虑使用数组来存储状态和按钮,并使用标签来标识按钮。
谢谢!它起作用了,我知道也许我不应该在 cmets 中问这个问题,但现在我的下一个问题是,当我单击第二个按钮时,例如,我单击 button1 然后单击 button2,两个按钮都被选中,怎么能我取消选择之前按下的按钮,所以屏幕上只能更改一个按钮? Ps:如果您认为这更适合 *** 我可以创建另一个问题
您可以为每个按钮设置一个标签值。当按下一个按钮时,您可以保存当前标签,然后在所有按钮上执行 for 循环,并取消选择那些与您之前保存的标签不同的标签。
【参考方案1】:
您要完成的操作称为单选按钮,不幸的是 ios(与 macOS 不同)不提供此功能。
我的建议是利用在 Interface Builder 中将不同图像分配给不同状态的选项——在本例中为 Default
和 Selected
状态——并创建一个 outlet 集合,一个表示一系列 UI 元素的数组同一类型。
建议不支持空选,默认选择第一个按钮。
在视图控制器中
创建一个出口集合
@IBOutlet var buttons : [UIButton]!
还有一个IBAction
@IBAction func buttonAction(_ sender: UIButton)
在接口构建器中
将图像设置为属性检查器中每个按钮的Default
和Selected
状态。
以正确的顺序将按钮连接到插座集合。
按相同顺序将标签 0 到 4 分配给按钮。
将所有按钮也连接到(相同的)IBAction。
在视图控制器中
为当前选中按钮的标签创建一个属性
var selectedButton = 0
在 viewDidLoad 中选择第一个按钮
override func viewDidLoad()
super.viewDidLoad()
buttons[selectedButton].isSelected = true
完成IBAction,它取消选择上一个按钮并选择当前按钮。
@IBAction func buttonAction(_ sender: UIButton)
let tag = sender.tag
buttons[selectedButton].isSelected = false
buttons[tag].isSelected = true
selectedButton = tag
【讨论】:
以上是关于按下其他连续按钮时如何取消选择按钮?的主要内容,如果未能解决你的问题,请参考以下文章