我正在使用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
的设置。我需要一个带圆角的按钮,但也需要一个可以突出显示背景颜色的按钮。
有什么方法吗?角半径需要是动态的。
答案 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];
}