如何从UIViewController访问UINavigationController

时间:2012-09-19 17:55:43

标签: iphone ios

在我的AppDelegate中,我有以下代码:

UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
UINavigationController *itemsNavigationController1 = [[UINavigationController alloc] initWithRootViewController:viewController1];

如何将UIVNagigationBar的背景颜色设置为绿色?

如果我这样做:

[self.navigationController.navigationBar setTintColor:[UIColor greenColor]];
来自viewController1,这没有效果。

提前致谢!

更新:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.title = NSLocalizedString(@"MyTitle", @"");

        [self.navigationController.navigationBar setTintColor:[UIColor greenColor]];
        [self.parentViewController.navigationController.navigationBar setTintColor:[UIColor greenColor]];
    }
    return self;
}

两者都没有效果

4 个答案:

答案 0 :(得分:5)

initWithNibName:bundle方法中,您的视图控制器还没有导航控制器。

如果您的导航控制器也是从nib文件创建的,请尝试实现UIViewController的awakeFromNib方法并在那里设置颜色。一旦加载并初始化了nib文件上的每个对象,就会调用awakeFromNib

如果以编程方式创建导航控制器,则只有在将视图控制器(从笔尖加载)添加到导航控制器后才应设置颜色。您可以在添加视图控制器的位置执行此操作。或者尝试实施viewDidLoad的{​​{1}}或viewWillAppear方法来设置颜色。

答案 1 :(得分:3)

你做得太快了。 (您没有收到错误,但您的消息是发送到nil的无效消息,因为您可以使用NSLog轻松发现。)等到FirstViewController的viewDidLoad

或者使用已建议的外观代理。这里的优点部分是时间变得不重要;您可以在任何视图控制器实例存在之前提前完成。例如:

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/ch19p549navigationInterface/p471p482navigationInterface/AppDelegate.m

答案 2 :(得分:2)

您还可以使用iOS 5中的appearance方法更改应用中导航栏的色调。例如,在您的application:didFinishLaunchingWithOptions中,您可以:

if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) 
{
    [[UINavigationBar appearance] setTintColor:[UIColor greenColor]];
}

答案 3 :(得分:0)

试 [itemsNavigationController1.navigationBar setTintColor:[UIColor greenColor]];