2014-09-19 83 views
0

在一个UIButton子类:选择时无法设置UIButton的背景颜色?

- (void) setHighlighted:(BOOL)highlighted { 
    [super setHighlighted:highlighted]; 

    if (highlighted) { 
     self.backgroundColor = [UIColor redColor]; 
    } 
    else { 
     self.backgroundColor = [UIColor blueColor]; 
    } 
} 

- (void)setSelected:(BOOL)selected { 
    [super setSelected:selected]; 
    if (selected) { 
     self.backgroundColor = [UIColor greenColor]; //this happens 
    } 
    else { 
     self.backgroundColor = [UIColor blueColor]; 
    } 
} 

我看的时候按钮高亮显示红色。但是,当我设置button.selected = YES,我从来没有看到绿色。为什么setHighlighted工作,但setSelected不?

我可以在“发生这种情况”的行上设置一个断点,它就会发生。但按钮的背景颜色不会变为绿色。

+0

您在界面构建器中设置了哪些属性? – Jared 2014-09-19 04:22:40

+0

这里有几个答案。 http://stackoverflow.com/questions/4049103/iphone-how-to-set-backgroundcolor-of-uibutton-with-buttontype-uibuttontypecust它看起来像一个常见的解决方案是设置一个背景图像,基本上是一个1x1像素的一种颜色。此解决方案的工作原理是为每个特定状态设置背景图像。我不确定你的代码为什么不起作用。该按钮在被选中后是否被取消选中? – mitrenegade 2014-09-19 04:55:09

回答

0

您是否在按钮的UIControlEventTouchUpInside操作中设置了selected属性?如果是这样,您的setHighlighted:方法在setSelected:之后再次被调用,因此backgroundColor正被设置回蓝色。

+0

是的,这可能是发生了什么事情。你知道任何解决方法吗? – soleil 2014-09-19 21:17:21

+1

我可能只是添加一个'updateBackgroundColor'(或其他)方法来检查两个状态,然后从重写的setter调用该方法。 – ryanipete 2014-09-20 06:36:12