LoginSignup
6
6

More than 5 years have passed since last update.

すべてのボタンのスタイルを変更する方法

Last updated at Posted at 2014-01-24

UIAppearance で色や画像を簡単に変える事ができる。

UIAppearance は、iOS5 から導入されたプロトコル。
これを使うと UINavigationBar や UIButton のインスタンスの色を変更することができる。

インスタンスではなくクラスに対して色設定ができるので、画面上で使われている指定されたクラスすべての色を変えることができる。

例えば、アプリ内の全ての UIButton に対して、同じ画像を適用したい場合、以下のように記述する。

// すべてのボタンのスタイルを変更する
UIImage *btnImg = [UIImage imageNamed:@"noimage.png"];
UIImage *btnImgHighlighted = [UIImage imageNamed:@"noimage.png"];

[[UIButton appearance] setBackgroundImage:btnImg forState:UIControlStateNormal];
[[UIButton appearance] setBackgroundImage:btnImgHighlighted forState:UIControlStateHighlighted];

そうすると、アプリ内の UIButton 全ての背景画像が変更される。

また、appearance の代わりに appearanceWhenContainedIn を使うと、指定した親ビューを条件に指定することができる。

例えば、

// 指定した条件のボタンのスタイルを変更する
UIImage *btnImg = [UIImage imageNamed:@"noimage.png"];
UIImage *btnImgHighlighted = [UIImage imageNamed:@"noimage.png"];

// 条件を指定
[[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil]
     setBackgroundImage:btnImg forState:UIControlStateNormal];

[[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil]
     setBackgroundImage:btnImgHighlighted forState:UIControlStateHighlighted];

こうすると、UINavigationBar (親ビュー) の中の UIButton だけに適用される
親ビューは、複数指定することができる。

条件の指定には、カスタムクラスも指定できる。

これを活用するケースは、例えば、iOS7ベースで開発したアプリを、iOS6に対応させたい場合、1つ1つバージョン判定をして、切り替えるのではなく、application:application didFinishLaunchingWithOptions:launchOptions などに記述して、アプリ内のものを一括で切り替える事ができる。

ただ、条件が細かったりすると、ちょっと使いづらいので、ケースによっては、カスタムなボタンを作った方がよい場合もあるので、ケースバイケースで、使うことをオススメします。

6
6
0

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
6
6