LoginSignup
20
13

More than 5 years have passed since last update.

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

Posted at

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

20
13
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
13