2016-01-21 57 views
1

我在滑出菜單中有十個按鈕。如何通過選擇將十個按鈕的文本顏色從黑色更改爲白色,然後在用戶單擊另一個按鈕時恢復爲原始狀態。將按鈕的文本顏色從黑色更改爲白色,然後還原返回

我通過按鍵循環逐個和我使用的代碼

@IBAction func onBtnClick(sender: UIButton) { 

     hmImg.hidden = true 
    editprofileImg.hidden = true 
    cntctsReqImg.hidden = true 
    cntctsManImg.hidden = true 
    preferencesImg.hidden = true 
    timeRuleImg.hidden = true 
    helpImg.hidden = true 
    logoutImg.hidden = true 


    var a: NSInteger = sender.tag 

    if a == 1 
    { 


     homeBtn.setTitleColor(UIColor.whiteColor(), forState:UIControlState.Normal) 
     hmImg.hidden = false 


     } 

    else if a == 2 
    { 
     editProfileBtn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 
     editprofileImg.hidden = false 

    } 
    else if a == 3 
    { 
     cntctsRequetsBtn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 
     cntctsReqImg.hidden = false 

    } 

    else if a == 4 


    { 
     cntctMangBtn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 
     cntctsManImg.hidden = false 

    } 
else if a == 5 
    { 
     preferenceBtn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 
     preferencesImg.hidden = false 
       } 

    else if a == 6 
    { 
     timeruleBtn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 
     timeRuleImg.hidden = false 

    } 

    else if a == 7 
    { 
     helpBtn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 
     helpImg.hidden = false 

    } 


    else if a == 8 
    { 
     logoutBtn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 

     logoutImg.hidden = false 

    } 

問題與這種狀態是按鈕的顏色保持白色當我選擇其他按鈕。我想,當用戶選擇另一個按鈕用於選擇

控制狀態是幾乎不存在了幾秒鐘,當我點擊按鈕來改變文字顏色爲黑色

+0

這些所有按鈕不會像單選按鈕一樣工作。在每個按鈕上單擊您應該還原其他按鈕狀態。 –

+0

我所有的按鈕命名不同。我應該在每個循環後恢復原狀。謝謝 – Nick

回答

2

試試這個:

let buttons = [homeBtn, editProfileBtn, ...] 
let images [hmImg, ....] 
func selectItemAtIndex(index:Int) { 
    buttons.forEach { 
     $0.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal) 
    } 
    images.forEach { 
     $0.hidden = true 
    } 
    buttons[index].setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 
    images[index].hidden = false 
} 
@IBAction func onBtnClick(sender: UIButton) { 
    let index = sender.tag 
    selectItemAtIndex(index - 1) // your tags is 1 based. 
} 

或者您可以使用它涉及較少的循環不同的方式。

let images [hmImg, ....] 
var currentBtn: UIButton! 
var currentImg: UIImageView! 
@IBAction func onBtnClick(sender: UIButton) { 
    currentBtn?.setTitleColor(UIColor.blackColor(), forState:UIControlState.Normal) 
    sender.setTitleColor(UIColor.whiteColor(), forState:UIControlState.Normal) 
    currentBtn = sender 
    let index = sender.tag - 1 // one based tages 
    currentImg?.hidden = true 
    currentImg = images[index] 
    currentImg.hidden = false 
} 
+1

值得注意的是循環越少效率越高。 – Losiowaty

+0

@Losiowaty確實。 – Ismail

+0

謝謝@Ismail。完美工作:-) – Nick

0

你可能要爲特定狀態的顏色,然後在需要時更改按鈕狀態。聽起來就像你想要一個收音機類型的按鈕設置,所以有一個數組中的按鈕,當任何一個按鈕被輕敲時,將該按鈕的狀態更改爲「選定」,其他人「正常」或類似的東西。

相關問題