0

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

4

1 回答 1

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

于 2013-11-06T03:06:36.443 回答