1

我试图弄清楚在 Swift 中切换按钮状态的逻辑。这个概念很简单:

  • 我在屏幕上有三个按钮。
  • 当我单击一个按钮时,它会切换到“已选择”状态
  • 当我单击另一个按钮时,我希望它将当前选择的按钮切换为“未选择”状态并将新按钮切换为“已选择”

我在 TouchUpInside 上为屏幕上的按钮使用了此功能,但目前可以将它们全部“选中”,这是我不想要的:

func highlightTrack(sender:UIButton){
    if(!sender.selected){
        sender.selected = true
        sender.backgroundColor = UIColor.blueColor()
    } else {
        sender.selected = false
    }
}

我来自 Javascript 的世界,所以我可能只是把我的逻辑交叉了,但是有没有办法检测屏幕上当前选择的按钮并将它们关闭,或者这更接近“单选”按钮类型的逻辑?

我的问题是这些按钮是根据某些条件以编程方式创建的,所以从技术上讲,我不应该像正确的那样动态创建 IBOutlets(IB 意思是“接口生成器”?)?

谢谢你的帮助!

4

2 回答 2

0
func highlightTrack(sender:UIButton) {
    if sender.isSelected {
        return
    }

    btn1.isSelected = false
    btn2.isSelected = false
    sender.isSelected = true
}
于 2017-07-28T10:00:07.193 回答
0

使用 TouchUpInside 控制事件将以下动作功能与所有三个按钮连接起来。

button1.addTarget(self, action: #selector(self.highlightTrack(button:)), for: .touchUpInside)
button2.addTarget(self, action: #selector(self.highlightTrack(button:)), for: .touchUpInside)
button3.addTarget(self, action: #selector(self.highlightTrack(button:)), for: .touchUpInside)

@IBAction func highlightTrack(button: UIButton) {

   if button.isSelected {
     return
   }

   button1.isSelected = false
   button1.backgroundColor = UIColor.white

   button2.isSelected = false
   button2.backgroundColor = UIColor.white

   button3.isSelected = false
   button3.backgroundColor = UIColor.white

   button.isSelected = true
   button.backgroundColor = UIColor.blue

}

另一种解决方案:

@IBAction func highlightTrack(button: UIButton) {

   if button.isSelected {
     return
   }

   updateButtionSelectionState(button: button, isSelected: (button == button1))
   updateButtionSelectionState(button: button, isSelected: (button == button2))
   updateButtionSelectionState(button: button, isSelected: (button == button3))

}


func updateButtionSelectionState(button: UIButton, isSelected: Bool) {
   button.isSelected = isSelected
   button.backgroundColor = isSelected ? UIColor.blue : UIColor.white
}
于 2017-07-28T10:07:34.533 回答