【Objective-C】UIButtonがタップされている時の背景色を変更する

Objective-CUIButton を作成する際のちょっとした小ネタのご紹介です。
追加した UIButton に背景色を設定したところ、タッチしてもハイライトされない(色が変わらない)ため、ボタンをタップできたのかがわからない見た目になってしまいました。
しかし、UIButton の setBackgroundColor には、state を指定することができず、通常時とハイライト時の背景色を分けて設定することができませんでした。

で、なんとかする方法はないかと調べていたところ、ヒットした記事がこちら。

UIButtonハイライト時の色を指定する – Qiita
https://qiita.com/akatsuki174/items/c0b8b5126b6c12f62001

上記の参考サイトによると、背景色ではなく、背景画像を設定すればいいのだそうです!

 

まずは、UIColorUIImage に変換します。
後から使いやすいように関数化しておくと便利です。

- (UIImage *) createImgFromColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0, 0, 1, 1);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(contextRef, [color CGColor]);
    CGContextFillRect(contextRef, rect);
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;
}

実際に使用するときは下記のように指定します。

// UIColor → UIImage
UIImage *backgroundImage = [self createImgFromColor:[指定したい背景色の UIColor]];

// UIButton に背景画像を設定する(通常時)
[button setBackgroundImage:backgroundImage forState:UIControlStateNormal];

2行目で関数を使って UIColorUIImage に変換しています。
で、5行目で、UIColor から作成した背景画像をボタンの背景に設定します。
このとき、forState で通常時やハイライト時の指定をします。
上記コードでは、通常時のボタンの背景色を指定しています。
指定としては以上です。

で、実際に動作確認をしようと思い、一旦通常時のみの背景色の指定だけを行い実機で実行してみたところ、ボタンを押した時に勝手に黒っぽくなってくれました!
これなら、わざわざハイライト時の背景色を指定しなくても良さそうです。

 

以上、Objective-C で UIButton をタップした時に背景色を変更する方法でした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG