3

我有一个选项卡式应用程序,其中包含导航控制器的选项卡和视图控制器。他们都使用相同的导航控制器导航栏:后退按钮+徽标图像。目前,我把这个代码放在每个视图控制器中:如何为所有导航控制器和视图控制器设置自定义导航栏(标题+ titleView)?

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

恕我直言,这不是最好的方式来做到这一点。我想为UIViewController使用一个类别,并且重写viewDidLoad方法,但是每个视图控制器都有一些额外的代码在viewDidLoad中执行,所以我认为重写不是解决方案。其他方式是什么?

+0

你定位到iOS 5?在iOS中,您可以全局设置这些值(例如,在您的appDelegate中)。 –

+0

目前,NOP :)但请让我知道该怎么做,在iOS 5中...... – Centurion

+1

看看UIAppearance:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAppearance_Protocol /Reference/Reference.html我写了一个小例子作为答案。请让我知道这对你有没有用。 –

回答

7

您可以创建一个UIViewController,MyViewControllerWithBackButtonAndLogo(您可以想出一个更好的名称)的子类,然后执行viewDidLoad来设置导航项目。让所有的视图控制器继承这个基类。然后确保视图控制器在其自己的实现中调用[super viewDidLoad]

另请注意,要设置后退按钮标题,您不应更改导航项目的title属性,但应设置合适的backBarButtonItem

+0

这是一个非常聪明的答案 - 我希望我能想到它,哈哈!总的来说,我认为这只是解决方法,但根本不是一件好事。我个人喜欢做的就是能够将这些自定义与特定的导航控制器相关联,以便堆叠中的所有视图都可以添加。我觉得这应该属于导航管理员的职责范围内,但我可能不太了解该课程......无论如何,谢谢你! – SilithCrowe

+0

是否可以在UITableViewController和UIViewController的子类中实现相同的viewDidLoad方法?所以,所有的控制器(视图和表格)都将具有相同的导航栏。 – JastinBall

相关问题