更改不同状态下子类UIButton的边框颜色

时间:2013-11-26 19:09:31

标签: ios objective-c uibutton

我有一个自定义UIButton子类,我想更改边框颜色,具体取决于此状态是UIControlStateNormal还是UIControlStateDisabled

最初在我的awakeFromNib中,我设置了所有默认值

[self setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];
[self setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
self.layer.borderColor = [UIColor redColor].CGColor;
self.layer.borderWidth = 1.0;

现在我想要的是当按钮的状态为UIControlStateDisabled时,它具有与该状态的titleColor相同的边框颜色,因此在这种情况下[UIColor grayColor]

我最初的尝试是覆盖titleForState,如此

- (NSString *)titleForState:(UIControlState)state
{
   if (state == UIControlStateDisabled)
   {
     self.layer.borderColor = [UIColor grayColor].CGColor;
   }
   else 
   {
     self.layer.borderColor = [UIColor redColor].CGColor;
   }

   return [super titleForState:state];
}

有人有任何建议吗?

1 个答案:

答案 0 :(得分:2)

您在设置新标题时设置边框颜色,而不是在更改按钮状态时设置边框颜色。您应该覆盖setEnabled:方法,因此每次通过此方法将状态更改为禁用/启用时,边框将会更改:

-(void)setEnabled:(BOOL)enabled
{
    [super setEnabled:enabled];
    if (enabled)
    {
        self.layer.borderColor = [UIColor redColor].CGColor;
    }
    else
    {
        self.layer.borderColor = [UIColor grayColor].CGColor;
    }
}

删除你的titleForState:方法并尝试这个。 希望这会有所帮助。