2014-09-10 88 views
4

我通過這一類方法改變UIButton的背景顏色,使用1x1像素的圖像:突出顯示UIButton BG顏色,但保留圖層角半徑?

- (void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)state 
{ 
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), NO, 0); 
    [backgroundColor setFill]; 
    CGContextFillRect(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, 1, 1)); 
    UIImage *backgroundImage = UIGraphicsGetImageFromCurrentImageContext(); 
    [self setBackgroundImage:backgroundImage forState:state]; 
    UIGraphicsEndImageContext(); 
} 

然而,這將覆蓋我的.layer.cornerRadius的設置。我需要一個帶有圓角的按鈕,但也需要一個可以突出顯示的背景顏色。

任何方法?角落半徑需要是動態的。

+0

你爲什麼用圖像而不是UIColor設置背景顏色?如果您的圖片爲1px x 1px,則它已經是純色。或者,您可以使用UIColor方法colorWithPatternImage: – skladek 2014-09-10 15:43:55

+0

我需要設置突出顯示的狀態背景色,UIKit不提供這樣做的手段,因此不屬於類別。但是,這樣做會殺死圓角,這就是我需要解決的問題。 – Luke 2014-09-10 15:45:14

回答

8

所以,我所要做的就是確保button.layer.masksToBounds已打開。問題解決了,不需要子類。

2

UIButton的子類。在你的子類中,在init方法中設置拐角半徑。如果你使用的是xib,這將是initWithDecoder:

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     self.layer.cornerRadius = 5.f; 
    } 

    return self; 
} 

也是setHighlighted:方法的子類。這是您設置背景顏色的位置。檢查「突出顯示」的值並適當地分配背景顏色。在此示例中,該按鈕是一個藍色按鈕,突出顯示爲帶圓角的紅色按鈕。您需要在筆尖中設置初始顏色。

- (void)setHighlighted:(BOOL)highlighted 
{ 
    [super setHighlighted:highlighted]; 

    self.backgroundColor = (highlighted) ? [UIColor redColor] : [UIColor blueColor]; 
} 
+0

這會工作,但我找到了一個更簡單的方法:) – Luke 2014-09-12 13:56:24

相關問題