iOS UIButtons - 选择 1 时切换背景,其他则不

iOS UIButtons - Toggle backgrounds when 1 is selected, others are not

我有多个按钮,代表数据输入(分数)。选择 1 个按钮后,将其背景更改为 1 种颜色。所有其他按钮应设置为不同的颜色,以显示当前选择的颜色(切换)。

我已使用此 thread 中的信息来实现 @IBAction 函数来更改按钮。我使用 Swift v4 回复/解决方案作为基础,本质上是一个单一的功能:

    @IBAction func buttonPressToggle(_ sender: UIButton) {
        sender.isSelected = !sender.isSelected
        if sender.isSelected {
            sender.backgroundColor = UIColor.orange
        } else {
            sender.backgroundColor = UIColor.green
        }
    }

所有按钮都使用相同的功能,因此我可以通过 sender 局部变量来定位按钮。我也可以使用 tag 属性,但目前我还没有对此做任何事情。

缺少的是“重置”任何其他按钮的状态/背景颜色,因为它不再被选中。

您可以执行以下操作:

class ViewController: UIViewController {

    @IBOutlet var collectionOfButtons: Array<UIButton>?
    
    private let selectionColor = UIColor.orange
    private let nonSelectedColor = UIColor.green
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    @IBAction func buttonPressToggle(_ sender: UIButton) {
        guard let buttons = collectionOfButtons else { return }
        
        for btn in buttons {
            if btn.tag == sender.tag {
                btn.backgroundColor = selectionColor
            } else {
                btn.backgroundColor = nonSelectedColor
            }
        }
    }

所以基本上我们将每个按钮的插座存储在一个数组中,如果一个按钮被选中,我们遍历这个数组并检查当前按钮 (btn) 是否被选中,如果是,我们将其 backgroundColor 设置为另一个。
所以对于这种方法,按钮应该被标记。

我已经上传了示例项目:https://github.com/finebel/ToggleButtons

    @IBAction func buttonPressToggle(_ sender: UIButton) {
        self.buttons.forEach {
            [=10=].backgroundColor = ([=10=] == sender) ? UIColor.orange : UIColor.green
        }
    }