オープンソースこねこね

Webプログラミングなどについてあれこれ。

枠だけのUIButtonをハイライトで背景色を変えるための拡張

中身透明で枠だけのボタンを作って、ハイライト時に背景色をボーダー色と同じに変えるUIButton拡張クラス(iOS7のロック画面パスコード入力ページの数値ボタンのようなヤツね)の作り方をメモしておきます。

UIBorderOnlyButton.h

#import <UIKit/UIKit.h>

@interface UIBorderOnlyButton : UIButton

@property (strong, nonatomic, readonly) UIColor *originalBackgroundColor;

@end

UIBorderOnlyButton.m

#import "UIBorderOnlyButton.h"

@implementation UIBorderOnlyButton

- (void)setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    if (highlighted) {
        super.backgroundColor = [UIColor colorWithCGColor:self.layer.borderColor];
    } else {
        super.backgroundColor = self.originalBackgroundColor;
    }
}

- (void)setBackgroundColor:(UIColor *)backgroundColor
{
    [super setBackgroundColor:backgroundColor];
    _originalBackgroundColor = backgroundColor;
}

@end

setHighlightedをオーバーライドして同時に背景色を変え、元々の背景色をoriginalBackgroundColorプロパティに退避しておく しくみになっている。

あとは、IBビルダーで配置したButtonのclassをUIBorderOnlyButtonに変えて、ViewControllerなどのコード上で以下のようにボーダーを設定してやればOKです。

 self.hogeButton.layer.borderColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0].CGColor;
 self.hogeButton.layer.borderWidth = 1.0;

参考サイト: