UIButtonの背景色を簡単設定

UIButtonの背景色を変えるのに、一々画像作るの面倒だな〜と思ってたら、UIButtonに背景色を設定する | 404 odakoh Not Foundで、「プログラム内で画像作っちゃおう」って感じでやっていたので、自分用にアレンジしてみました。

元ネタ
・UIColor指定で背景色画像作成

変更点
・カテゴリ使ってUIButtonを拡張
・色指定を@"RRGGBB"にしたIFを追加

で、以下がその実装です。

//  UIButton+BGColor.h
@interface UIButton (BGColor)

- (void)setBackgroundColor:(UIColor *)color forState:(UIControlState)state;
- (void)setBackgroundColorString:(NSString *)colorStr forState:(UIControlState)state;

@end
//  UIButton+BGColor.m
#import "UIButton+BGColor.h"

#import <QuartzCore/QuartzCore.h>
#import "UIColor-Expanded.h"

@implementation UIButton (BGColor)

- (void)setBackgroundColor:(UIColor *)color forState:(UIControlState)state {
    CGRect buttonSize = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    UIView *bgView = [[[UIView alloc] initWithFrame:buttonSize] autorelease];
    bgView.layer.cornerRadius = 5;
    bgView.clipsToBounds = true;
    bgView.backgroundColor = color;
    UIGraphicsBeginImageContext(self.frame.size);
    [bgView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    [self setBackgroundImage:screenImage forState:state];
}

- (void)setBackgroundColorString:(NSString *)colorStr forState:(UIControlState)state {
    UIColor *color = [UIColor colorWithHexString:colorStr];
    [self setBackgroundColor:color forState:state];
}

@end

2つ目のメソッドが見ての通り文字列での背景色指定ですが、これいらない方は、UIColor-Expanded.hが不要です。というか、UIColor-Expanded.h取ってくるの面倒な方は省くと良いですね。
UIColor-Expanded.hによるUIColorの拡張については、以前の記事をどうぞ。もの自体はこちらで公開されています。

そして、使い方。

[button1 setBackgroundColor:[UIColor blueColor] forState:UIControlStateNormal];
[button2 setBackgroundColorString:@"ff0000" forState:UIControlStateNormal];

結果は(見なくても分かると思うけど)こんな感じになります。