2013-09-23 35 views
0

現在我寫這個設置的UIBarButtonItem的背景圖像:如何爲所有可能的狀態設置UIBarButtonItem backgroundImage?

[[UIBarButtonItem appearance] setBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
[[UIBarButtonItem appearance] setBackgroundImage:image forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; 
[[UIBarButtonItem appearance] setBackgroundImage:image forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 
[[UIBarButtonItem appearance] setBackgroundImage:image forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault]; 

我怎麼可以幹這個嗎?

感謝, 薩科

回答

1

你不能真正列舉VA在C中以任何特別方便的方式提供enum的提示;你所能做的最好的就是把你關心的值放到一個數組中,並迭代它。

NSUInteger controlStates[] = {UIControlStateNormal, UIControlStateHighlighted, UIControlStateSelected, UIControlStateDisabled}; 
NSUInteger numControlStates = 4; 
for(NSUInteger i = 0; i < numControlStates; i++){ 
    [[UIBarButtonItem appearance] setBackgroundImage:image 
              forState:controlStates[i] 
              barMetrics:UIBarMetricsDefault]; 
} 
0

BarButtonItems使用的背景圖片爲正常狀態設置,除非你專門設置的圖像爲另一種狀態,所以你可以只寫

[[UIBarButtonItem appearance] setBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

如果你想更明確你也可以只是或所有的狀態在一起(他們是按位標誌)

[[UIBarButtonItem appearance] setBackgroundImage:image forState:UIControlStateNormal | UIControlStateHighlighted | UIControlStateSelected | UIControlStateDisabled barMetrics:UIBarMetricsDefault]; 
+0

我只是試過了明確的版本,它在我這裏不起作用。具體來說,我試過這個: [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal | UIControlStateHighlighted | UIControlStateSelected barMetrics:UIBarMetricsDefault]; 背景圖像仍然是默認的藍色數組,而不是我的新圖像。 –

+0

請注意,setBackButtonBackgroundImage(您在此處使用但未在您的原始問題中)僅適用於Back按鈕的UIBarButtonItems。我只是想確保你不會在兩種相似的外觀方法之間感到困惑。 –

+0

謝謝。我知道不同之處,我實際上在我的代碼中都使用了這兩個函數,而且我使用setBackButtonBackgroundImage來玩,這樣我就可以很容易地看到這個功能是否適用於不同的狀態,而不是使用OR運算符。 –

1

從文檔的UIBarButtonItem摘自:

在一般情況下,你應該指定一個值由不具有自定義值集合其他國家所使用的正常狀態。同樣,如果屬性依賴於條形指標(在iPhone上,橫向方向條與標準高度不同),則應指定UIBarMetricsDefault的值。

基本上,您只需要設置UIControlStateNormal的值,除非您爲其他設置自定義值。如果您未設置自定義值,則它們將默認爲您爲UIControlStateNormal設置的值。

+0

看來,當我這樣做時,一些默認值將優先於我爲UIControlStateNormal設置的值。例如,如果我應用setTitleTextAttributes方法在按鈕中將單詞「後退」僅用於UIControlStateNormal,則它會在我點擊它時變成白色,而不是保持綠色。因此,儘管我更改了UIControlStateNormal值,但它似乎並沒有像我期望的那樣影響其他狀態。 –

相關問題