UIBarButtonItem のタイトルや文字色などの状態をサッと変更する✨


UIBarButtonItem のタイトルや文字色などの状態を、アニメーションなしで サッと 変更したかったので試したことを書きます。📝
より正しい方法があれば教えていただけると助かります。🙏


実現したいこと

状況に応じて次の 条件1条件2 のようにタイトルや文字色を サッと 切り替えます。

条件1

rightBarButtonItem.title = "Later"
rightBarButtonItem.tintColor = UIColor.whiteColor()

条件2

rightBarButtonItem.title = "Next"
rightBarButtonItem.tintColor = UIColor.redColor()


まず単純に設定すると

これだけだと Later と Nextサッと ではなく、いくつかの状態を経て切り替わります。


そこで実現した方法

UIBarButtonItem を外したうえで状態を変更し、再度追加しました。

navigationItem.setRightBarButtonItem(nil, animated: false)
rightBarButtonItem.title = "Later"
rightBarButtonItem.tintColor = UIColor.whiteColor()
navigationItem.setRightBarButtonItem(rightBarButtonItem, animated: false)

するとこのように Later と Nextサッと 切り替わります。


こうした経緯

UIButton の場合

title を変更するのに次のように設定するとスムーズに切り替わりません。

button.title = "Next"

次のようにすればスムーズに切り替わります。

button.setTitle("Next", forState: .Normal)

UIBarButtonItem の場合

まず同様の setTitle がないか探しましたが見当たりません。

そこで UIBarButtonItem が継承している UIBarItem のドキュメント を見ると次のように記述されています。

You should set this property before adding the item to a bar. The default value is nil.

これを読んで追加する前に設定すればよいと考えました。
そして一度 UIBarButtonItemnil にして再度追加したところ、 サッと 切り替わりました。


参考

https://developer.apple.com/reference/uikit/uibarbuttonitem
https://developer.apple.com/reference/uikit/uibaritem