更改突出显示的UIButton BG颜色,但保留层角半径?

时间:2014-09-10 15:26:43

标签: ios objective-c uibutton cglayer

我正在使用1px xpp图像通过此类别方法更改UIButton的背景颜色:

- (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的设置。我需要一个带圆角的按钮,但也需要一个可以突出显示背景颜色的按钮。

有什么方法吗?角半径需要是动态的。

2 个答案:

答案 0 :(得分:12)

所以,我所要做的就是确保button.layer.masksToBounds已开启。问题解决了,不需要子类化。

答案 1 :(得分: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];
}