Objective-C
で UIButton
を作成する際のちょっとした小ネタのご紹介です。
追加した UIButton
に背景色を設定したところ、タッチしてもハイライトされない(色が変わらない)ため、ボタンをタップできたのかがわからない見た目になってしまいました。
しかし、UIButton の setBackgroundColor
には、state
を指定することができず、通常時とハイライト時の背景色を分けて設定することができませんでした。
で、なんとかする方法はないかと調べていたところ、ヒットした記事がこちら。
UIButtonハイライト時の色を指定する – Qiita
https://qiita.com/akatsuki174/items/c0b8b5126b6c12f62001
上記の参考サイトによると、背景色ではなく、背景画像を設定すればいいのだそうです!
まずは、UIColor
を UIImage
に変換します。
後から使いやすいように関数化しておくと便利です。
- (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行目で関数を使って UIColor
を UIImage
に変換しています。
で、5行目で、UIColor
から作成した背景画像をボタンの背景に設定します。
このとき、forState
で通常時やハイライト時の指定をします。
上記コードでは、通常時のボタンの背景色を指定しています。
指定としては以上です。
で、実際に動作確認をしようと思い、一旦通常時のみの背景色の指定だけを行い実機で実行してみたところ、ボタンを押した時に勝手に黒っぽくなってくれました!
これなら、わざわざハイライト時の背景色を指定しなくても良さそうです。
以上、Objective-C で UIButton をタップした時に背景色を変更する方法でした。
ご参考になれば幸いです。