代码之家  ›  专栏  ›  技术社区  ›  Coder221

选择和取消选择按钮集合

  •  1
  • Coder221  · 技术社区  · 6 年前

    我有三个按钮 One, Two, Three, 还有一个函数 buttonPressed 这三个按钮的集合如下。

    var btnTag = [Int]()
    
    @IBAction func buttonPressed(_ sender: UIButton) {
    
        guard let button = sender as UIButton? else { return }
        if(btnTag.contains((sender as AnyObject).tag!))
        {
            if let index = btnTag.index(of: (sender as AnyObject).tag!)
            {
                btnTag.remove(at: index)
            }
        }
        else
        {
           btnTag.append((sender as AnyObject).tag!)
        }
    
        if !button.isSelected {
            button.isSelected = true
            button.setTitleColor(.red, for: .normal)
        }
        else
        {
            button.isSelected = false
            button.setTitleColor(.white, for: .normal)
        }
    }
    

    我喜欢把纽扣的颜色改成 red 单击时,然后单击“其他”按钮时,上一个按钮的颜色为 white . 所以如果我按 One, 我想要 One 成为 然后当我按下 Two ,我想要 红色 一个 作为 . 我做了上面的事,但是允许 multiple selection 而且不能 deselect 以前的更改。我该怎么解决?

    2 回复  |  直到 6 年前
        1
  •  4
  •   AaoIi    6 年前

    您只需创建 UIButton U按钮

    @IBOutlet var buttons: [UIButton]!
    

    使用上述集合并将所有按钮与插座连接。同时连接下面的所有按钮。

    @IBAction func buttonPressed(_ sender: UIButton) {
        buttons.forEach { $0.isSelected = false
            $0.setTitleColor(.white, for: .normal)
        }
    
        buttons[sender.tag].setTitleColor(.red, for: .normal)
        buttons[sender.tag].isSelected = true
    }
    
        2
  •  1
  •   kathayatnk    6 年前

    由于此时只高亮显示一个按钮,因此不需要标记数组,而需要引用所有按钮。

    //Let say these are my button refrence
    @IBOutlet weak var button1: UIButton!
    @IBOutlet weak var button2: UIButton!
    @IBOutlet weak var button3: UIButton!
    

    所有这些按钮都针对同一方法

    @IBAction func buttonPressed(_ sender: UIButton) {
    
         //clear all button selected state
         clearSelectedState()
    
         //select the button that was clicked
         sender.isSelected = true
         sender.setTitleColor(.red, for: .normal)
    }
    
    
    func clearSelectedState() {
    
         button1.isSelected = false
         button1.setTitleColor(.white, for: .normal)
    
         .... proceed to do for others
    }
    

    现在在 clearSelectedState

    ///this can be replaced in clear state method
    [button1, button2, button3,...].forEach {
           $0.isSelected = false
           $0.setTitleColor(.white, for: .normal)
    }