2015-07-06 6 views
0

Я настроил свою кнопку. Я хочу изменить цвет текста кнопки и цвет рамки, когда я нажимаю на нее. Я переопределить метод UIButton setHighlighted следующим кодомИзменить цвет границы UIButton после нажатия

if (highlighted) { 
    self.layer.borderColor = [[UIColor colorWithRed:0.447 green:0.443 blue:0.443 alpha:1.000] CGColor]; 
    self.titleLabel.textColor = [UIColor colorWithRed:0.447 green:0.443 blue:0.443 alpha:1.000]; 
} 
else{ 
    self.layer.borderColor = [[ UIColor whiteColor] CGColor]; 
    self.titleLabel.textColor = [UIColor whiteColor]; 
} 

Однако, это не будет работать, когда я просто нажмите на кнопку, и это изменит цвет, когда я сделал шаг на кнопке. Я попытался создать контрольную точку, чтобы проверить правильность ввода этой функции. Я заметил, что эти коды будут выполняться один раз, когда я просто нажимаю кнопку (запускается событием touchbegan), но выполняю ее дважды, когда я буду двигаться дальше (срабатывает touchbegan, touchmove event).

Я также пытаюсь добавить действие на уровне представления:

[downloadBtn addTarget:self action:@selector(allDownloadBtnClicked:) forControlEvents:UIControlEventTouchUpInside]; 
[downloadBtn addTarget:self action:@selector(allDownloadBtnHighlighted:) forControlEvents:UIControlEventTouchDown]; 

Но он все еще не может работать, как мой expection.

Любой может дать мне какое-либо предложение для достижения моей цели? Благодаря!

+0

Вы установили self.layer.borderWidth = 2.0f для вашей кнопки? – Maddy

+0

Я установил borderWidth в layoutSubviews. – kuokuo321

ответ

0

Попробуйте этот.

- (instancetype)init 
{ 
    self = [super init]; 
    if (self) { 
     [self addCustomFeature]; 
    } 
    return self; 
} 

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 
    [self addCustomFeature]; 
} 

#pragma mark CustomizeUI 
- (void)addCustomFeature 
{ 
    // creating curved corners 
    [self.layer setCornerRadius:5]; 
    [self.layer setMasksToBounds:YES]; 

} 

- (void)setBorderColor:(UIColor *)borderColor 
{ 
    [self.layer setBorderWidth:1.0f]; 
    [self.layer setBorderColor:borderColor.CGColor]; 
} 

- (void) setHighlighted:(BOOL)highlighted { 
    [super setHighlighted:highlighted]; 
     if (highlighted) { 
      self.borderColor = [UIColor redColor]; 
     } 
     else { 
      self.borderColor = [UIColor greenColor]; 
     } 
} 
+0

Я установил borderWidth в функции layoutSubviews. И ответ по-прежнему не может работать. – kuokuo321

+0

@ kuokuo321: Вы назвали метод суперкласса? –

+0

как в layoutSubviews, так и в setHighlighted Я сначала назвал метод суперкласса. – kuokuo321

0

Вы можете изменить выбранный флаг внутри подправить внутри метод:

- (void)allDownloadBtnClicked:(UIButton*)sender{ 
    sender.selected = !sender.selected; 
    ... 
} 

и переопределить setSelected функцию вместо

- (void) setSelected:(BOOL)selected{ 
    [super setSelected:selected]; 
    if (selected) { 
     self.layer.borderColor = [[UIColor colorWithRed:0.447 green:0.443 blue:0.443 alpha:1.000] CGColor]; 
     self.titleLabel.textColor = [UIColor colorWithRed:0.447 green:0.443 blue:0.443 alpha:1.000]; 
    } 
    else{ 
     self.layer.borderColor = [[ UIColor whiteColor] CGColor]; 
     self.titleLabel.textColor = [UIColor whiteColor]; 
    } 
} 
+0

Я пробовал этот метод, но в результате он может ввести эту функцию, но не может изменить цвет рамки. Кстати, я использую Xcode 6.4 и подключаюсь к своему iPhone 6+ для проверки этой функции. – kuokuo321

+0

@ kuokuo321 только borderColor не работает? textColor установлен? – streem

+0

Оба параметра borderColor и textColor не работают. – kuokuo321

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