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