2015-04-17 60 views
1

我想添加一個播放/暫停類型按鈕到UIToolbar,但我不確定如何訪問代碼中的按鈕。我試圖爲按鈕添加一個插座並改變它,但它不會以這種方式改變,所以我顯然沒有正確地做。在UIToolbar上切換UIBarButtonItem

@IBOutlet weak var playPauseButton: UIBarButtonItem! 

func toggleButton() { 

    playPauseButton = UIBarButtonItem(barButtonSystemItem: .Stop, target: self, action: "stop:") 

} 

編輯:我想出瞭解決的辦法是以下幾點:

(感謝wltrup指着我在正確的方向!)

var isActive = false 
@IBOutlet weak var toolbar: UIToolbar! 
@IBAction func playPauseButton(sender: AnyObject) { 
    if (!isActive) { 
     play() 
     swapPlayPauseButton(.Pause) 
    } else { 
     pause() 
     swapPlayPauseButton(.Play) 
    } 
    isActive = !isActive 
} 

func swapPlayPauseButton(barButtonSystemItem: UIBarButtonSystemItem) { 
    var items = [AnyObject](toolbar.items!) 
    items[2] = UIBarButtonItem(barButtonSystemItem: barButtonSystemItem, target: self, action: "playPauseButton:") 
    toolbar.setItems(items, animated: true) 
} 

或者,一個解決方案使用wltrup建議的物業觀察員:

var timer: NSTimer? { 
    didSet { 
     isActive = (timer != nil) 
     if timer == nil { 
      swapPlayPauseButton(.Play) 
     } else { 
      swapPlayPauseButton(.Pause) 
     } 
    } 
} 

@IBAction func playPauseButton(sender: AnyObject) { 
    if (!isActive) { 
     play() 
    } else { 
     pause() 
    } 
} 

func swapPlayPauseButton(barButtonSystemItem: UIBarButtonSystemItem) { 
    var items = [AnyObject](toolbar.items!) 
    items[2] = UIBarButtonItem(barButtonSystemItem: barButtonSystemItem, target: self, action: "playPauseButton:") 
    toolbar.setItems(items, animated: true) 
} 
+0

難道你不需要在_IBAction_中更新'isActive'的值嗎?或者它的值是在'play()'和'pause()'方法中更新的? – wltrup

+0

它已在方法中更新,但爲了清晰起見,我將其添加到解決方案 – doovers

+1

好的。就個人而言,如果可能的話,我更願意只在一個地方更新它,就在IBAction中,因爲那個變量的範圍非常有限,這使得代碼更容易理解。只是我的偏好。 – wltrup

回答

2

您需要直接更新工具欄的items屬性,或者直接(但不是動畫)或使用setItems:animated:方法。看看的文檔Configuring Toolbar Items

相關問題