2014-09-10 1 views
4

Я изменение цвета фона UIButton с помощью этого метода категории, используя 1px 1px по изображению:Изменить цвет 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

+0

Мне нужно установить выделенный цвет фона состояния, UIKit не предоставляет никаких средств для этого, следовательно, для категории. Однако, делая это таким образом, убивает закругленные углы, вот что мне нужно исправить. – Luke

ответ

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

Смежные вопросы