2013-05-13 86 views
0

我期待在改變上的TabBar的圖形,如改變的TabBar圖像時的TabBar沒有根視圖

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
UITabBar *tabBar = tabBarController.tabBar; 
UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0]; 
UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1]; 
UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2]; 
UITabBarItem *tabBarItem4 = [tabBar.items objectAtIndex:3]; 
tabBarItem1.title = @"Home"; 
tabBarItem2.title = @"Maps"; 
tabBarItem3.title = @"My Plan"; 
tabBarItem4.title = @"Settings"; 

我這裏的問題是,我的tabbarcontroller不是我的根視圖,所以我怎麼能引用tabbarcontroller來更改標籤圖像?

我正在關注這篇文章中的建議(Can I have more than 1 UITabBarController?),該建議指的是將tableview鏈接到一個或多個tabbar控制器。

所以我的根視圖不是一個標籤欄,但標籤欄視圖來自前一個屏幕後加載。

我有這個所有的工作,與初始屏幕,然後標籤欄,一切工作正常,我只需要更改標籤欄上的圖形,我不能做到這一點作爲所有教程改變選項卡欄圖形使用應用程序委託並將tabbarcontroller稱爲根視圖。

對此的任何幫助非常感謝!

+0

標籤欄項目屬於每個標籤中的視圖控制器,所以您應該在其中更改外觀,而不是在標籤欄控制器中。 – rdelmar 2013-05-13 22:36:46

+0

我試圖設置應用程序委託中標籤欄的外觀,但無法在應用程序委託中正確引用標籤欄控制器 – Richard 2013-05-13 23:09:34

+0

問題是,這是錯誤的做法。您應該在單個視圖控制器的awakeFromNib或initWithCoder:方法中執行此操作。 – rdelmar 2013-05-14 00:45:22

回答

2

標籤欄項目屬於每個標籤中的各個內容視圖控制器,因此您應該更改這些控制器中的標籤項屬性,而不是試圖引用標籤欄控制器。如果希望在標籤欄控制器出現時立即顯示這些更改,則需要將這些自定義設置置於其awakeFromNib或initWithCoder方法(用於在IB中設置的控制器)。

0

理查德,

首先,你後參考指出,這是非常糟糕的視覺設計,但無論如何,如果你需要做到這一點。

如何引用標籤欄控制器取決於如何實例化它。這個東西應該很明顯,所以我猜你正在用xib或storyboard。不管是哪種方式,當你加載第二個視圖時將會有標籤欄,你將加載一個視圖控制器來控制視圖。只需將標籤欄綁定到IB中視圖控制器的屬性,並且您可以在視圖控制器的視圖負載中執行設置。其實,如果你使用IB(XIB或storyboard),你可以在那裏設置你的圖標。

+0

我已經在IB中設置了tabbar控制器,並且我知道我可以在那裏設置圖標,但是我也想更改標籤欄的視覺效果而不是IB允許的 - 更改背景等。 – Richard 2013-05-13 22:45:21