2013-04-08 73 views
1

我有一個UIButton,根據我的應用程序有4種不同的狀態。從選擇狀態到正常狀態時UIButton的高亮顯示狀態不會出現

state-1 normal. 
state-2 selected. 
state-3 highlighted , going normal-to-selected. 
state-4 highlighted , going selected-to-normal. 

最初按鈕處於正常狀態,當我按下它時,它會進入選定狀態並在這些狀態之間保持切換。

這是通過指定兩個狀態的圖像並更改所選屬性來實現的。

但是,在更改每個狀態時,我需要更改突出顯示的狀態圖像,以確保它在按下狀態時表示狀態3和狀態4。

問題是,雖然從選中到正常,但它看起來像UIButton沒有突出顯示的狀態。

因此,現在我保持一個BOOL伊娃來檢查我的視圖中的選擇狀態。 並保持按鈕處於正常狀態,並根據BOOL ivar的值每次操作將其圖像更改爲突出顯示狀態和正常狀態。

有沒有更簡單的方法來實現這個目標?

回答

8

其原因是該州是兩個值的混合。

一些最公地的人

UIControlStateNormal, 
UIControlStateHighlighted, 
UIControlStateDisabled, 
UIControlStateSelected, 
UIControlStateSelected | UIControlStateHighlighted, 
UIControlStateSelected | UIControlStateDisabled, 

了,所以如果你想有一個highlighted狀態時selected然後我喜歡做這樣的。

[button setImage:imageHighlighted forState:UIControlStateSelected | UIControlStateHighlighted]; 

如果是一般的規則是選擇的時候可以做一些沿

UIControlState mixedState = UIControlStateSelected | UIControlStateHighlighted; 
    [button setImage:[button imageForState:state] forState:state]; 
    [button setBackgroundImage:[button backgroundImageForState:state] forState:state]; 
    [button setTitleColor:[button titleColorForState:state] forState:state]; 

線等等

+1

學到了一些有用的東西:)謝謝 – 2013-04-08 12:31:45

+0

所以,如果我保持一個圖像的選擇狀態,一個正常。 一個用於選擇+突出顯示,一個用於突出顯示, 然後自動圖像將chnage基於按鈕的狀態而不需要單獨的布爾型ivar? – 2013-04-08 12:37:33

+0

@AmoghTalpallikar是的,有用的理解的根本原因,而不僅僅是如何解決它。 :)關於你的第二個評論:是的,沒錯。 – hfossli 2013-04-08 12:42:56

0

將突出顯示的狀態保存在布爾變量中是跟蹤狀態的常用方法,但是這裏只是簡單的代碼。

有一個setHighlighted方法在UIControl上調用,您可以覆蓋。您可以設置變量在那裏,而不是在多個動作:

-(void)setHighligted:(BOOL) highlighted { 
    self.mySavedHighlightedState = highlighted; 
} 

mySavedHighlightedState屬性創建一個自定義的UIButton類來實現這一點。

+0

'self.isHighlighted'基本上只做你總是有相同的高亮狀態這'(self.state&UIControlStateHighlighted)== UIControlStateHighlighted' – hfossli 2013-04-08 12:26:45

+0

@hfossil,我改變了變量名稱。並不意味着隱藏'isHighlighted' getter。 – 2013-04-08 13:00:26

+0

這真是令人困惑。 – hfossli 2013-04-08 13:04:45