2014-09-19 47 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