2017-05-08 3 views
1

を動作しません。私はこのコードでカスタムUIButtonを作成しました:iOSの設計可能なボタンの背景色

@implementation HGButton 

- (instancetype)initWithFrame:(CGRect)frame 
{ 
    if (self = [super initWithFrame:frame]) { 
     [self initVariables]; 
     [self customInit]; 
    } 

    return self; 
} 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [self initVariables]; 
     [self customInit]; 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect 
{ 
    [self customInit]; 
} 

- (void)setNeedsLayout 
{ 
    [super setNeedsLayout]; 
    [self setNeedsDisplay]; 
} 

- (void)prepareForInterfaceBuilder 
{ 
    [self customInit]; 
} 

-(void) initVariables 
{ 
    self.fillColor   = [UIColor lightGrayColor]; 
    self.borderWidth  = 2; 
    self.cornerRadious  = 10; 
} 

- (void)customInit 
{ 
    [self setBackgroundColor:self.fillColor]; 

    self.layer.cornerRadius = self.cornerRadious; 
    self.layer.borderWidth = self.borderWidth; 

    if (self.cornerRadious > 0) { 
     self.layer.masksToBounds = YES; 
    } 
} 

、それは非常に簡単なコードです。ストーリーボードのビューにボタンを追加すると、完璧に見えます。 しかし、私は、アプリを再生ボタンの背景色は常に明るい灰色です。 ボタンを押すと背景色がストーリーボードで選択した色に変わります。

これはなぜですか?エラーはどこですか?

答えて

1

self.fillcolorがストーリーボードで変更されても、背景色が更新されないためです。あなたはこの

@property (nonatomic, copy) IBInspectable UIColor *fillcolor; 

があなたのクラスで

- (void)setFillColor:(UIColor *)fillColor { 
    if (fillColor != _fillColor) { 
     _fillColor = fillColor; 
     [self customInit]; 
    } 
} 

を次のコードを追加していと仮定

は、この情報がお役に立てば幸いです。

乾杯。

+0

おかげで自分のクラスでこれを追加します。) –

0

fillColorを監視するための 'set method'を記述する必要があります。

- (void)setFillColor:(UIColor *)fillColor 
{ 
    _fillColor = fillColor; 
    self.backgroundColor = fillColor; 

} 
0

今では動作しますが、

- (void)setFillColor:(UIColor *)fillColor { 
    self.backgroundColor = fillColor; 
} 
関連する問題