0

我有我编程方式创建一个UINavigationController:如何更改UINavigationController的UINavigationBar?

MessageTableViewController* homeStream = [[MessageTableViewController alloc] initWithNibName:@"MessageTableViewController" bundle:nil]; 
      homeStream.fetchHomeStream = YES; 
      homeStream.title = @"Home"; 
      UINavigationController* navBarController = [[UINavigationController alloc] initWithRootViewController:homeStream]; 
      navBarController.tabBarItem.image = [UIImage imageNamed:@"hometab.png"]; 
      [homeStream release]; 

我有一个名为STNavigationBar定制UINavigationBar的。我如何使用STNavigationBar而不是默认的UINavigationBar,它是UINavigationController的一部分?

回答

3

我结束了使用的iOS5的UIKit外观代理:

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"header"] forBarMetrics:UIBarMetricsDefault]; 

没有子类或类别需要。

0

编辑为未来的读者,下面的答案不会再在iOS 5

你不能仅仅将其设置为现有实例工作,因为UINavigationController的只读属性导航栏。我不认为UINavigationController的子类是你想要的。

我认为最好的办法是创建一个扩展UINavigationBar的类,如here所讨论的。

+0

我原本把它作为一个可以正常工作的类别,但是iOS5打破了这个功能,现在使用类别来替代实际方法是一种不好的做法。所以我决定将其子类化。它在我在IB中设置导航栏时起作用,但我也需要以编程方式设置它... –

+0

我没有意识到这一点。选项号码怎么样? 3在这个答案? http://stackoverflow.com/questions/1869331/set-programmatically-a-custom-subclass-of-uinavigationbar-in-uinavigationcontrol/3080665#3080665 – Wolfert

+0

刚发布了一个答案,我用iOS5的UIKit外观代理 –

相关问题