UIBarButtonItemの再生、一時停止ボタンの切り替え


はじめに

qnote Advent Calendar 2016 3日目は4月に新卒で入社した新人が書いてみたいと思います。

UIBarButtonItemを動的に切り替えたいそんなあなたに

例として音楽プレイヤーアプリの再生と一時停止ボタンを切り替えたいと思います。

(真ん中のボタンを押したら再生と一時停止を切り替える)

hogeViewController.swift
@IBOutlet weak var toolbar: UIToolbar!

@IBAction func playPauseAction(_ sender: UIBarButtonItem) {
        var items = toolbar.items!
        var toggleButton:UIBarButtonItem
        if /*音楽を再生中かどうか*/ {
            // 音楽の一時停止処理など
            toggleButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.play, target: self, action: #selector(hogeViewController.playPauseAction(_:)))
        } else {
            // 音楽の再生処理など
            toggleButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.pause, target: self, action: #selector(hogeViewController.playPauseAction(_:)))
        }
        items[/*切り替えるボタンの場所*/] = toggleButton
        toolbar.setItems(items, animated: false)
    }

解説

StoryBoardからアウトレットとアクションを引っ張ってきます。

items[/*切り替えるボタンの場所*/] = toggleButton
itemsにはUIToolbarの配列が入っているので何番目のボタンを切り替えるか指定します。
最初の画像の構成は以下のようになっているので

PauseとPlayを切り替えるのでここでは3を指定すればOKです。

別のメソッドを呼びたい時は
hogeViewController.playPauseAction(_:))の部分を適宜書き換えれば呼び出せます。

参考サイト

http://stackoverflow.com/questions/29639537/toggle-play-pause-uibarbuttonitem-in-toolbar-using-swift
UIBarButtonSystemItemの一覧はこちら
https://developer.apple.com/reference/uikit/uibarbuttonsystemitem