2015-04-15 59 views
1

我試圖在使用Swift啓動和停止自動收報器時在切換播放和暫停圖像之間切換按鈕。我的代碼:使用Swift在工具欄中切換播放/暫停UIBarButtonItem

import UIKit 

class ViewController: UIViewController { 

@IBOutlet var btnPlayPause: UIBarButtonItem! 
var isPlaying = false 
var timer = NSTimer() 
var count = 0 
@IBOutlet weak var lblTime: UILabel! 
@IBOutlet var myToolbar: UIToolbar! 




@IBAction func btnPlay(sender: UIBarButtonItem) 
    { 
    //set the button to animate 

    self.myToolbar.setItems([self.btnPlayPause], animated: true) 



    if !isPlaying //if the ticker is not ticking 
    { 
     //change the button to a pause button 


     println("worked")//start the ticker 

     timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateTime"), userInfo: nil, repeats: true) 

     isPlaying = true 

    }else{ //if the ticker is ticking 

     //change the pause button to a play button 

     self.btnPlayPause = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Play, target: self, action: nil) 

     //pause the ticker 
     timer.invalidate() 
     //btnPlayPause.enabled = true 
     isPlaying = false 
     } 

} 

    @IBAction func btnReset(sender: UIBarButtonItem) 
{ 
    //reset and restart the ticker 
    timer.invalidate() 
    count = 0 
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateTime"), userInfo: nil, repeats: true) 

} 


@IBAction func btnStopit(sender: UIBarButtonItem) 
{ 
    //stop and reset the ticker to "0" 

    timer.invalidate() 
    count = 0 
    lblTime.text = String(count) 

    isPlaying = false 

} 

func updateTime() 
{ 
    //displays ticker label with count 

    lblTime.text = String(count++) 

} 

override func viewDidLoad() 
{ 

    super.viewDidLoad() 
    let button = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Pause, target: self, action: "btnStopit:") 
    self.btnPlayPause = button 
} 



override func didReceiveMemoryWarning() 
{ 

    super.didReceiveMemoryWarning() 

} 


} 

遊戲和工具欄上的所有其他按鈕結算和工具欄這樣單獨創建暫停按鈕本身:

Initial ViewAfter btnPlayPause clicked

我只想使用暫停按鈕切換我的播放按鈕,而無需從工具欄中刪除任何其他按鈕。這可能嗎?

如果有人能幫助我,我會非常感激!

感謝

+0

if isPlaying == false {...}如果if!isPlaying {...} –

+0

我讚賞這個建議。但是,所做的只是寫同樣的東西而已。我按照你的建議改變了它,它不會以任何不同的方式影響最終結果。 – Unconquered82

+1

如果它能解決你的問題,我會把它作爲答案發布。這只是測試Bool條件的正確語法 –

回答

4

鑄造你的按鈕的UIBarButtonItem的新實例是不會做要緊。首先爲您的工具欄創建出口並檢索現有項目,然後根據工具欄上的位置更改播放按鈕項目。

在我的情況下,切換按鈕位於左側,因此我使用索引0訪問它並將其替換爲相應的切換。然後調用工具欄上的setItems()將更新您的工具欄。將動畫設置爲true,以獲得漂亮的小淡入淡出動畫。

@IBOutlet weak var toolBar: UIToolbar! 

@IBAction func playPauseToggle(sender: UIBarButtonItem) { 

    var toggleBtn = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Play, target: self, action: "playPauseToggle:") 

    if playing { 
     player.pause() 
     playing = false 
    } else { 
     player.play() 
     toggleBtn = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Pause, target: self, action: "playPauseToggle:") 
     playing = true 
    } 

    var items = toolBar.items! 
    items[0] = toggleBtn 
    toolBar.setItems(items, animated: true) 

} 
1

稍微密集的版本:

@IBAction func playPauseToggle(sender: UIBarButtonItem) { 
    var barButtonItems = toolBar.items! 
    barButtonItems[0] = UIBarButtonItem(barButtonSystemItem: player.rate == 1.0 ? .Pause : .Play, 
    target: self, action: "playPauseButtonWasPressed:") 
    toolBar.setItems(barButtonItems, animated: true) 
} 
1

//此代碼測試,並與斯威夫特2

@IBOutlet弱VAR的導航欄工作:UINavigationBar的!

//playToPause() 
@IBAction func playButton(sender: UIBarButtonItem) { 

    let newBarButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Pause, target: self, action: "pauseButton:") 
    navigationBar.topItem?.rightBarButtonItem = newBarButton 
} 

// pauseToPlay() 
@IBAction func pauseButton(sender: UIBarButtonItem){ 

    let pauseBtnItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Play, target: self, action: "playButton:") 
    navigationBar.topItem!.rightBarButtonItem = pauseBtnItem 
}