Reputation: 121
I want to change the identifier of an UIBarButtonItem with codes from "Play" to "Pause". How can I do that?
Thanks
Upvotes: 11
Views: 29976
Reputation: 331
I use this code to switch Edit mode
@IBAction func editMode(sender: UIBarButtonItem) {
self.setEditing(!self.isEditing, animated: true)
let newButton = UIBarButtonItem(barButtonSystemItem: (self.isEditing) ? .done : .edit, target: self, action: #selector(editMode(sender:)))
self.navigationItem.setLeftBarButton(newButton, animated: true)
}
Upvotes: 7
Reputation: 12353
This code is tested and working with 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
}
Upvotes: 1
Reputation: 1
I saw looked at several threads and this is the only answer that actually does what I'm looking for. The only problem I have is that it moves my toolbar item to the far left, and I have it centered. If you have your button centered with a flexible space bar, or if it is not the first button, just change the index like this:
toolbar.items![1] = playPauseButton //apply for second toolbar item
Upvotes: 0
Reputation: 534
For a toolbar item, here is the sample 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
}
}
Upvotes: 3
Reputation: 887
1) init a new button
//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) Just change the text:
navigationBar.topItem?.leftBarButtonItem?.title = "AnyText"
If you're also having trouble accessing the navigation bar it is probably best to just set some tag to it (I like to use negative tags for specific Views* to make sure 2 views* don't get the same tag). Then you could fx do like this:
let navigationBar = (self.view.viewWithTag(-1) as UINavigationBar)
navigationBar.topItem?.leftBarButtonItem?.title = "AnyText"
Upvotes: 18