2009-02-02 100 views
18

我有一個UINavigationController,並且使用Interface Builder中導航欄的Tint屬性將其更改爲白色。但按鈕和標題中的文本仍然是默認的顏色,白色,因此在白色背景下丟失。任何人都知道如何解決這個問題?如何更改UINavigationBar按鈕項上的文本顏色

回答

31

隨着iOS 5的這個更容易,使用的UIBarButtonItem外觀代理:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: 
         [UIColor blackColor], 
         UITextAttributeTextColor, 
         [UIColor clearColor], 
         UITextAttributeTextShadowColor, nil]; 

[[UIBarButtonItem appearance] setTitleTextAttributes: attributes 
              forState: UIControlStateNormal]; 

將其設置在應用程序中:didFinishLaunchingWithOptions:

1

你不能迭代UINavigationBar視圖的內容來查找awakeFromNib中的按鈕嗎?

+0

您可以。但我正在做setTextColor:forStates:在我的按鈕上,它似乎被忽略。但會堅持下去。 此外,它與私有api(或至少私人承擔的用戶界面結構的知識)的使用接近。 – schwa 2009-03-26 02:40:42

+0

哦,我收回它 - 它確實有效。看到後續的答案... – schwa 2009-03-26 02:41:55

+0

我偷看了這樣的其他意見。雖然這是一個私人的API-ish,但它至少不會做出任何假設:如果內部發生變化,您的代碼將無法檢測到您搜索的任何條件。但我還沒有完成UINavigationBar。 – 2009-03-26 02:42:47

8

這裏有一種方法:

[[theNavigationBar.subviews objectAtIndex:1] setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 
[[theNavigationBar.subviews objectAtIndex:2] setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 

然而,巨大的,需要注意的。這很可能會在未來的操作系統版本上崩潰,因此不推薦。

至少你應該進行大量的測試,並確保你對導航欄的子視圖佈局的假設是正確的。

+1

我會發現,特別是脆弱的,因爲你正在通過索引訪問項目。更安全的是獲得所有的子視圖項目,比較你期望的類別,甚至使用職位。但這正是這個想法的核心。 :) – 2009-03-26 17:53:09

2

或者你用你自己的按鈕欄物品子類與你指定一個二傳手,邏輯單元不是iPhone OS 3假設揭露文字的顏色爲每個按鈕

2

我一樣drunknbass建議。我採取了在幾種狀態下爲後退按鈕製作一系列圖像,並在少數幾個州製作了常規按鈕,並將它們放入一個定製的UIButton子類中,以設置適當的樣式。

作爲一種解決方案,它不能很好地擴展,但我的需求很簡單。它具有不會打破內置控件中的子視圖訂單是否改變的優勢,這是該方法明顯的缺點。需要幾個圖像的缺點。另一個棘手的問題是處理方向更改,因爲按鈕應該更改大小。

在相關說明中,如果更改了導航欄的色調顏色,它將無法與特殊的「更多」視圖控制器一起使用,以定製選項卡欄的順序。似乎沒有任何「可接受」的方法來改變該視圖中工具欄的顏色。

0

這裏的清潔方式(依靠公共API)來做到這一點恕我直言:你應該使用navigationItemtitleView屬性以將它自己的UILabel上,您將定製textColor

 
 
UILabel* lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 20)]; 
lbl.textAlignment=UITextAlignmentCenter; 
lbl.backgroundColor=[UIColor clearColor]; 
lbl.textColor=[UIColor colorWithRed:0.18 green:0.2 blue:0.56 alpha:1]; 
theControllerOnWhichYouWantToHaveATitleWithYourOwnColor.navigationItem.titleView=lbl; 
[lbl release]; 
 

11
for (id subView in theNavigationBar.subviews) { 
    if ([subView isKindOfClass:[UIButton class]]) { 
     [(UIButton *)subView setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
     [(UIButton *)subView setTitleShadowColor:[UIColor clearColor] forState:UIControlStateNormal]; 
    } 

} 
-1

您可以通過在導航欄中添加如下標籤來更改標題外觀。

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 35)]; 
label.backgroundColor = [UIColor clearColor]; 
label.textAlignment = UITextAlignmentCenter; 
label.textColor =[UIColor whiteColor]; 
label.text=self.title; 
self.navigationItem.titleView = viewLabel; 
[label release];