按下其他连续按钮时如何取消选择按钮?

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 中将不同图像分配给不同状态的选项——在本例中为 DefaultSelected 状态——并创建一个 outlet 集合,一个表示一系列 UI 元素的数组同一类型。

建议不支持空选,默认选择第一个按钮。


在视图控制器中

创建一个出口集合

@IBOutlet var buttons : [UIButton]!

还有一个IBAction

 @IBAction func buttonAction(_ sender: UIButton)  

在接口构建器中

将图像设置为属性检查器中每个按钮的DefaultSelected 状态。 以正确的顺序将按钮连接到插座集合。 按相同顺序将标签 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
 

【讨论】:

以上是关于按下其他连续按钮时如何取消选择按钮?的主要内容,如果未能解决你的问题,请参考以下文章

取消单选按钮? [复制]

选择按钮时隐藏视图和其他对象

当数据来自数据库时,如何一次只选择一个单选按钮并在javascript中取消选择其他单选按钮?

Xamarin 表单选择器确定或取消按钮按下检测

连续按下按钮时如何加快前进/后退过程

点击时突出显示 tableview 单元格,按下警报控制器操作按钮时取消突出显示