web-dev-qa-db-fra.com

Comment utiliser UIBarButtonSystemItem pour changer l'identifiant UIBarButtonItem? (Rapide)

Je veux changer l'identifiant d'un UIBarButtonItem avec des codes de "Play" à "Pause". Comment puis je faire ça?

Merci

8
Ahmed

1) initier un nouveau bouton

//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) Il suffit de changer le texte: 

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

Si vous rencontrez également des difficultés pour accéder à la barre de navigation, il est probablement préférable de lui attribuer une balise (j'aime utiliser des balises négatives pour des vues spécifiques * afin de vous assurer que 2 vues * n'obtiennent pas la même balise). ____.] Alors vous pourriez faire comme ceci:

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

J'utilise ce code pour changer de mode d'édition 

@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)
}
8
Paulo Bruckmann

Pour un élément de barre d'outils, voici l'exemple de code.

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


    }

}
4
Arda Ç.

Ce code est testé et fonctionne avec 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
}
1
Naishta

J'ai vu regardé plusieurs discussions et c'est la seule réponse qui fait réellement ce que je cherche. Le seul problème que j'ai, c'est qu'il déplace mon élément de la barre d'outils à l'extrême gauche, et je l'ai centré. Si votre bouton est centré avec une barre d'espacement flexible ou s'il ne s'agit pas du premier bouton, il suffit de modifier l'index comme suit: toolbar.items![1] = playPauseButton //apply for second toolbar item

0
PopUhler