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