2016-02-01 47 views
0

我想弄清楚在Swift中切換按鈕狀態的邏輯。這個概念很簡單:刪除按鈕上的選定狀態,同時單擊一個不同的按鈕(Swift)

  • 我在屏幕上有三個按鈕。
  • 當我點擊一個按鈕時,它會切換到「選定」狀態
  • 當我點擊一個不同的按鈕時,我希望它將當前選定的按鈕切換到「未選中」狀態並將新按鈕切換到「選擇」

我有這個功能我就TouchUpInside使用的按鈕在屏幕上,但它有可能在瞬間將它們全部「選擇」這是我不想:

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

我來自Javascript的世界,所以我可能只是把我的邏輯交叉了起來,但是它是e是一種檢測屏幕上當前所選按鈕並將其關閉的方法,或者這更接近「無線電」按鈕類型邏輯?

我的問題是,這些按鈕是根據特定的條件編程創建的,所以在技術上我不應該創建IBOutlets,就像正確的(IB意思是'Interface Builder'?)?

感謝您的幫助!

+0

您應該添加IBOutlets每個按鈕,當方法被調用,檢查每個IBOutlet中的狀態。 –

+1

更好的是,使用引用outlet集合(一個數組),然後在'highlightTrack'中只需遍歷數組。如果元素是=='sender',那麼突出顯示按鈕,否則刪除突出顯示。 – Paulw11

+0

@MthetheS。我的問題是,這些按鈕是根據某些條件編程創建的,所以在技術上我不應該像創建IBOutlets那樣正確(IB意思是「Interface Builder」?)?或者我認爲這是不正確的? – MillerMedia

回答

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

    btn1.isSelected = false 
    btn2.isSelected = false 
    sender.isSelected = true 
} 
+0

請添加一些註釋以獲得更好的解釋。 – Shivaay

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 
} 
相關問題