如何在多个表视图控制器中更改导航栏的颜色

时间:2013-11-06 01:47:40

标签: ios7 xcode5

我试图弄清楚如何在多个表视图中更改表视图导航栏的颜色。表视图都连接到导航控制器。例如,我希望一个导航栏为蓝色,而另一个导航栏为红色。我在AppDelegate.m文件中尝试了下面的代码,但它只是将所有导航栏更改为相同的颜色。是否有其他地方我可以放置此代码来更改特定位置的颜色。我听说我需要创建新文件,但我不知道在哪里放置代码,或者在新文件中使用什么代码。我对此有点新鲜。任何建议都将非常感谢![[UINavigationBar appearance] setBarTintColor:[UIColor orangeColor]];

1 个答案:

答案 0 :(得分:1)

在表视图控制器中执行此操作的一种方法:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    // set navigation bar's tint color when being shown
    self.navigationController.navigationBar.barTintColor = [UIColor greenColor];
}

您可以添加属性以使视图控制器可重复使用。通常,您可以在推送视图控制器的prepareForSegue方法中设置该属性:

@interface MyViewController ()
@property (strong, nonatomic) UIColor *toolbarTintColor;
@end

@implementation MyViewController

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    if (self.toolbarTintColor) {
        self.navigationController.toolbar.barTintColor = self.toolbarTintColor;
    }
}

最后,另一种方法是实现UINavigationControllerDelegate协议并在willShowViewController中设置颜色:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    UIColor *barTintColor = ...// your logic for determining the color for the given controller
    navigationController.toolbar.barTintColor = barTintColor;
}

如果出于某种原因,您不想在推送的视图控制器的viewWillAppear中执行此操作,则可以在推送视图控制器中执行此操作。