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

How can I deselect a button when other consecutive button is pressed?

我正在创建一个有 5 个按钮的测试,每个按钮对应一种特定的颜色,问题是当我 select 连续第二个按钮时,前一个按钮仍然是 select ed,我怎样才能使我的代码 select 一次只有一个按钮,而取消 select 前一个按钮?

我该如何解决这个问题?

这是我的代码

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)
        }
        
    }
}

您要完成的工作称为 单选按钮,不幸的是 iOS(与 macOS 不同)不提供此功能。

我的建议是利用选项将不同的图像分配给 Interface Builder 中的不同状态——在本例中为 DefaultSelected 状态——并创建一个插座集合,一个数组表示相同类型的 UI 个元素的序列。

建议不支持空 selection,默认第一个按钮是 selected。


  • 在ViewController

    • 创建出口集合

      @IBOutlet var buttons : [UIButton]!
      
    • 和一个IBAction

       @IBAction func buttonAction(_ sender: UIButton) { }
      
  • 在界面构建器中

    • 将图像设置为属性检查器中每个按钮的 DefaultSelected 状态。
    • 按正确顺序将按钮连接到插座集合。
    • 按相同顺序将标签 0 到 4 分配给按钮。
    • 将所有按钮也连接到(相同的)IBAction。
  • 在ViewController

    • 为当前 selected 按钮的标签创建一个 属性

       var selectedButton = 0
      
    • 在viewDidLoad中select第一个按钮

       override func viewDidLoad() {
           super.viewDidLoad()
           buttons[selectedButton].isSelected = true
       }
      
    • 完成 IBAction,它删除select上一个按钮和 select当前按钮。

       @IBAction func buttonAction(_ sender: UIButton) {
           let tag = sender.tag
           buttons[selectedButton].isSelected = false
           buttons[tag].isSelected = true
           selectedButton = tag
       }
      

假设您已将按钮命名如下:第一个按钮:“opt1Button”,第二个按钮:“opt2Button”,第三个按钮:“opt3Button”等等... 创建一个名为“optionSelected”的 IBAction 该函数如下所示: @IBAction func optionSelected(_ sender: UIButton) {

    opt1Button.isSelected = false
    opt2Button.isSelected = false
    opt3Button.isSelected = false
    opt4Button.isSelected = false
    opt5Button.isSelected = false
    
    sender.isSelected = true
}

一旦选择了任何选项,所有按钮都会进入 'isSelected' 错误状态,即首先会取消选择所有按钮,并且选中的按钮将标记为已选中。选择任何按钮时,将再次执行相同的过程,所有内容都将取消选择,用户按下的按钮将被标记为已选择。

从 (https://developer.apple.com/forums/thread/685124) 找到了这个答案,它对我有用。