2014-07-13 2 views
0

Я использую этот код, чтобы дать моим UIButtons границу (в iOs 7). Он работает достаточно хорошо, но только для одного состояния кнопки.Programmaticaly устанавливает цвет границы кнопок в iOs7

- (void)setRoundedBorder:(float) radius borderWidth:(float)borderWidth color:(UIColor*)color 
{ 
    CALayer * l = [self layer]; 
    [l setMasksToBounds:YES]; 
    [l setCornerRadius:radius]; 
    // You can even add a border 
    [l setBorderWidth:borderWidth]; 
    [l setBorderColor:[color CGColor]]; 
} 

Как его настроить, чтобы я мог установить цвет кнопки в выбранном/выделенном состоянии. PS: Отредактировано для добавления: Этот код (вверху) находится внутри категории на UIButton.

Я попытался это:

CALayer * l = [self layer]; 
    [l setMasksToBounds:YES]; 
    [l setCornerRadius:radius]; 
    // You can even add a border 
    [l setBorderWidth:borderWidth]; 
    if (self.state == UIControlStateHighlighted) { 
     [l setBorderColor:[anotherColor] CGColor] 
    } else { 
    [l setBorderColor:[color CGColor]]; 
} 

Это не работает, так как это находится внутри категории и apperently это не может обнаружить изменение состояния ...

+0

Вы можете наблюдать за состоянием кнопки и изменять цвет рамки, когда она изменяется на выбранную и выделенную. – dasdom

+2

Какой класс является вашим '-setRoundedBorder: borderWidth: color:' объявленным? Вы подклассифицируете 'UIButton'? Потому что тот же код, примененный к слою 'UIButton', работает во всех состояниях для меня. –

+0

Это внутри категории на UIButton. – user1028028

ответ

2
- (void)setRoundedBorder:(float) radius borderWidth:(float)borderWidth color:(UIColor*)color state:(UIControlState*)buttonState 
{ 

    CALayer * l = [self layer]; 
    [l setMasksToBounds:YES]; 
    [l setCornerRadius:radius]; 
    // You can even add a border 
    [l setBorderWidth:borderWidth]; 
    [l setBorderColor:[color CGColor]]; 

    if(buttonState == UIControlStateHighlighted) 
     [l setBorderColor:[YOURCOLOR CGColor]]; 

} 

или

Если это ваша декларация UIButton, добавьте селектора.

[yourButton addTarget:self action:@selector(highlightButtonBorder:) forControlEvents:UIControlEventTouchDown]; 
[yourButton addTarget:self action:@selector(unhighlightButtonBorder:) forControlEvents:UIControlEventTouchUpInside]; 
//Add extra selectors for other states if required as shown above 


- (void)highlightButtonBorder:(UIButton*)sender 
{ 
    //your extra code goes here 
    yourButton.layer.borderColor = [[UIColor YOURCOLOR]CGColor]; 
} 

- (void)unhighlightButtonBorder:(UIButton*)sender 
{ 
    //your extra code goes here 
    myButton.layer.borderColor = [[UIColor YOURCOLOR]CGColor]; 
} 

Надеюсь, это вам поможет.

+0

не работает ... он не обнаруживает, что состояние было изменено или оно не может установить цвет для определенного состояния. – user1028028

+0

Можете ли вы разместить больше кода. Я хочу посмотреть, как его зовут. Я отредактирую свой ответ, чтобы дать альтернативное решение. –

1

Вы можете добавить кнопку непосредственно в качестве цели для UIControlEvents. Это должно работать внутри вашей категории, просто позвоните setupButton один раз для кнопок.

- (void)setupButton{ 
    self.layer.borderWidth = borderWidth; 
    [self makeNormalState:self]; 

    [self addTarget:self action:@selector(makeHighlightedState:) forControlEvents:UIControlEventTouchDown]; 
    [self addTarget:self action:@selector(makeNormalState:) forControlEvents:UIControlEventTouchUpInside]; 
    [self addTarget:self action:@selector(makeNormalState:) forControlEvents:UIControlEventTouchUpOutside]; 
} 

- (void)makeNormalState:(UIButton*)sender{ 
    sender.layer.borderColor = normalStateColor.CGColor; 
} 

- (void) makeHighlightedState:(UIButton*)sender{ 
    sender.layer.borderColor = highlightedStateColor.CGColor; 
} 
Смежные вопросы