如何为所有导航控制器和视图控制器设置自定义导航栏(标题+ titleView)?

Cen*_*ion 3 iphone objective-c uinavigationcontroller uinavigationitem

我有一个选项卡式应用程序,其中包含选项卡中的导航控制器和视图控制器.所有这些都使用相同的导航控制器导航栏:后退按钮+徽标图像.目前,我将此代码放在每个视图控制器中:

- (void)viewDidLoad
{
  [super viewDidLoad];
  self.navigationItem.title = @"Back";
  UIImage *headerImage = [UIImage imageNamed:@"Logo.png"];
  self.navigationItem.titleView = [[[UIImageView alloc] initWithImage:headerImage] autorelease];
}
Run Code Online (Sandbox Code Playgroud)

恕我直言,这不是最好的方法.我正在考虑使用UIViewController的类别并覆盖viewDidLoad方法,但是每个视图控制器都有一些额外的代码要在viewDidLoad中执行,所以我猜覆盖不是解决方案.还有什么其他方法?

Mik*_*ler 8

您可以创建的子类UIViewController,MyViewControllerWithBackButtonAndLogo(你能想出更好的名字),然后执行viewDidLoad设置的导航项目.使所有视图控制器继承自此基类.然后只需确保视图控制器调用[super viewDidLoad]它们自己的实现.

另请注意,要设置后退按钮标题,不应更改导航项的title属性,而应设置适当的属性backBarButtonItem.