2015-01-29 4 views
6

Ich möchte die Kennung eines UIBarButtonItem mit Codes von "Play" zu "Pause" ändern. Wie kann ich das machen?Wie UIBarButtonSystemItem verwenden, um UIBarButtonItem Bezeichner zu ändern? (Swift)

Dank

+0

möglich Duplikat [umschalten zwischen UIBarButtonSystemItemPlay und UIBarButtonSystemItemPause] wechseln (http://stackoverflow.com/questions/9068629/toggle-between-uibarbuttonsystemitemplay-and-uibarbuttonsystemi tempause) – rishi

+0

ho michar vu ahmed ?? –

+1

nein ist es nicht. Ich frage nach swift. – Ahmed

Antwort

14

1) init eine neue Schaltfläche

//change to play 
let button = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Play, target: self, action: "someAction") 
navigationBar.topItem.leftBarButtonItem = button 

//change to pause 
let button = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Pause, target: self, action: "someOtherAction") 
navigationBar.topItem.leftBarButtonItem = button 

2) einfach den Text ändern:

navigationBar.topItem?.leftBarButtonItem?.title = "AnyText" 

Wenn Sie auch Probleme beim Zugriff auf die Navigationsleiste aufweist, ist es wahrscheinlich Am besten setze ich einfach ein Tag darauf (ich verwende gerne negative Tags für bestimmte Views *, um sicherzustellen, dass 2 Views * nicht das gleiche Tag erhalten). Dann könnte man wie folgt fx tun:

let navigationBar = (self.view.viewWithTag(-1) as UINavigationBar) 
navigationBar.topItem?.leftBarButtonItem?.title = "AnyText" 
4

Für ein Symbolelement, hier ist der Beispielcode.

var player:AVAudioPlayer = AVAudioPlayer() 

@IBOutlet var toolbar: UIToolbar! 
@IBOutlet var playPauseButton: UIBarButtonItem! 

@IBAction func playPause(sender: AnyObject) { 

    if player.playing { 

     player.pause() 

     playPauseButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Play, target: self, action: "playPause:") 

     toolbar.items![0] = playPauseButton //apply for first toolbar item 

    } else { 

     player.play() 

     playPauseButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Pause, target: self, action: "playPause:") 

     toolbar.items![0] = playPauseButton //apply for first toolbar item 


    } 

} 
+0

Wir benötigen die output-Referenz playPauseButton nicht, wenn wir das Element in die ToolBar injiziert haben. –

0

Ich sah sah mehrere Threads und das ist die einzige Antwort, die tatsächlich tut, was ich suche. Das einzige Problem, das ich habe, ist, dass es mein Toolbar-Element nach ganz links bewegt, und ich habe es zentriert. Wenn Sie Ihre Taste mit einer flexiblen Leertaste zentriert, oder wenn es nicht die erste Taste ist, nur den Index wie folgt ändern: toolbar.items![1] = playPauseButton //apply for second toolbar item

0

Dieser Code wird getestet und die Arbeit mit Swift 2

@IBOutlet weak var navigationBar: 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 
} 
4

ich benutze diesen Code Edit-Modus

@IBAction func editMode(sender: AnyObject) { 
    self.setEditing(!self.editing, animated: true) 
    let newButton = UIBarButtonItem(barButtonSystemItem: (self.editing) ? .Done : .Edit, target: self, action: #selector(editMode(_:))) 
    self.navigationItem.setLeftBarButtonItem(newButton, animated: true) 
} 
Verwandte Themen