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)
}
難道你不需要在_IBAction_中更新'isActive'的值嗎?或者它的值是在'play()'和'pause()'方法中更新的? – wltrup
它已在方法中更新,但爲了清晰起見,我將其添加到解決方案 – doovers
好的。就個人而言,如果可能的話,我更願意只在一個地方更新它,就在IBAction中,因爲那個變量的範圍非常有限,這使得代碼更容易理解。只是我的偏好。 – wltrup