2010-09-04 29 views
0

在我的基於tabBar的應用程序中,我已經子類化了UINavigationBar。假設我有三個:BlueNavBar,BlackNavBar和RedNavBar。它看起來像這樣:更改pushViewController上的導航欄:

 //BlueNavBar.m 
     - (void)drawRect:(CGRect)rect { 
      self.tintColor = [UIColor colorWithRed:65.0f/255.0f green:(156.0f/255.0f) blue:(215.0f/255.0f) alpha:1.0]; 
      UIImage *image = [[UIImage imageNamed:@"blueNavBar.png"]retain];  
      [image drawInRect:rect]; 
      [image release];  
     } 

我已經爲Interface Builder的每個選項卡分配了子類型的導航欄。這很好,沒有問題。

在某些viewControllers但是我想在「pushViewController」期間更改導航條。比方說,我想將當前的導航欄(例如BlueNavBar)更改爲RedNavBar。如何在不使用Interface Builder的情況下以編程方式執行此操作?

+0

你不需要'保留''image'變量,這意味着你也可以去掉它的'release' – 2010-09-04 01:36:31

回答

0

這取決於你如何設計視圖控制器類本身。設計您需要的一種方法是在您將其壓入堆棧之前,在創建視圖控制器時設置導航欄類型(即顏色)。類似:

SomeViewController* someViewController = [[SomeViewController alloc] initWithNibName:@"SomeView" bundle:nil]; 
someViewController.navigationBarStyle = NBStyleRed; // NBStyleRed defined as an enum somewhere 
[self.navigationController pushViewController:someViewController animated:YES]; 
[someViewController release]; 

navigationBarStyle setter方法將隨後(重新)創建視圖控制器適當色導航欄。