回答

8

最好的辦法是設置tintColor在你添加按鈕之後,就像在iOS 4.0中一樣,在tintColor被設置後,它不再更新添加到酒吧的按鈕。

2

請參閱 「更改UINavigationBarButtons的顏色」

編輯:我刪除了鏈接,因爲域名是下來...

的是google緩存中的文本:


好的,這是另一個快速提示。 「如何更改工具欄上按鈕的顏色。」當然,這可以應用於任何工具欄,但我將在UINavigationBar上演示該過程。

上圖僅顯示幾種顏色。事實上,你可以使任何你想要的顏色按鈕。太棒了!代碼也很容易做到這一點。我們想要做的第一件事是打開頭文件,無論哪個對象將使用不同顏色的導航欄按鈕,並聲明前向類UINavigationButton。您可以通過迭代UINavigationBar的子視圖,閱讀其子視圖類名稱,或者如果您擁有越獄設備,通過類轉儲UIKit來獲得此類。

將您的接口聲明之前,下面一行:

@class UINavigationButton; 

現在,申報,我們會用實際更改按鈕的顏色標頭的新方法。

- (void)changeNavigationButtonColorToColor:(UIColor *)newColor 

或者類似於上面的代碼行。

現在,打開對象的實現文件並實現上述方法。在任何地方你的文件,添加以下方法:

- (void)changeNavigationButtonColorToColor:(UIColor *)newColor { 
    for (UIView *view in self.navigationController.navigationBar.subviews) { 
      NSLog(@"%@", [[view class] description]); 
      if ([[[view class] description] isEqualToString:@"UINavigationButton"]) { 
        [(UINavigationButton *)view setTintColor:newColor]; 
      } 
    } 
    } 

正如你可以在上面看到,這其實是一個容易得多比它第一次出現是。我們首先要做的是設置一個for循環,使用NSFastEnumeration遍歷UINavigationBar的子視圖。然後我們輸出子視圖的類名,以供將來參考。如果類名是UINavigationButton,那麼我們已經看到了我們的觀點。我們所做的就是設置tintColor屬性,如果UINavigationButton。

就是這樣,我們完成了!另外,如果你想要更廣泛的範圍,我建議創建一個新的UINavigationBar類別,並在其中放置按鈕顏色改變方法。這是你的方法可以由任何使用UINavigationBar的類執行,而不必一遍又一遍地重新創建相同的方法。

請記住,後退按鈕和導航按鈕不是一回事。您將不得不單獨對後退按鈕着色。

和往常一樣,這裏有一個鏈接到演示此代碼示例應用程序:NavButtonColor.zip

+0

感謝很多朋友!!!!! – 2011-10-18 20:13:14

15

我發現這個解決方案優於本文列出的:Tint UIButton and UIBarButtonItem。與接受的答案不同,它允許您獨立於UINavigationBar更改UIBarButtonItems的顏色。

如果鏈接在未來出現故障,其要點是您創建帶有一個段的着色UISegmentedControl(帶有UISegmentedControlStyleBar),然後創建一個UIBarButtonItem作爲其自定義視圖。

在iOS 5中,UIBarButtonItem具有tintColor屬性。

+2

太棒了!我不明白爲什麼這不會被選作答案,因爲這種方法允許您動態地更改UIBarButton項目的背景,而不僅僅是在創建時。感謝分享! – Stunner 2011-07-05 13:20:42

+0

這個很棒! +1 – 2011-12-16 13:23:58

+0

我做到了這一點,現在按鈕不再對動作做出反應......任何想法可以做什麼? – 2011-12-16 13:50:44

1

UIBarButtonItems固有地迴應setTintColor,雖然它不是公共API。

我有一個自定義UINavigationBar子類運行此塊:

for (UIView *subview in self.subviews) { 
    if ([subview respondsToSelector:@selector(setTintColor:)]) { 
     [subview performSelector:@selector(setTintColor:) withObject:[UIColor redColor]]; 
    } 
} 

顯然與您所選擇的顏色替換[UIColor redColor]

0

可用在IOS 5.0和更高的UIBarButtonItem爲:

- (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics 

這似乎是目前唯一的溶液(IOS 9.0)。 tintColor現在用於圖像顏色。

0

Swift3

UIBarButtonItem.appearance().tintColor = UIColor.green