2010-09-04 61 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方法将随后(重新)创建视图控制器适当色导航栏。