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

时间:2021-07-16 07:50:07

标签: ios swift xcode button uistackview

我正在创建一个有 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)
        }
        
    }
}

1 个答案:

答案 0 :(得分:0)

您将要完成的任务称为单选按钮,遗憾的是 iOS(与 macOS 不同)不提供此功能。

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

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


  • 在视图控制器中

    • 创建一个outlet集合

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