navigationBar颜色和标题

时间:2011-08-08 14:51:48

标签: objective-c xcode uiviewcontroller uinavigationcontroller uinavigationbar

我有很多.xib文件,我尝试以编程方式重新创建它们。

唯一的问题是,我无法再自定义导航栏了。

De版本函数由具有多个条形按钮项的另一个视图调用,因此代码对于其他函数是通用的。

- (void)versions
{
    VersionsViewController *verController = [[VersionsViewController alloc] initWithDocument:document];
    [verController setDelegate:self];

    [self loadPopupView:verController];

    [verController release];
}

- (void)loadPopupView:(UIViewController *)viewController
{
    if (popOverController != nil && [popOverController isPopoverVisible]) 
    {
        [popOverController dismissPopoverAnimated:YES];
    }

    if(![popOverController isPopoverVisible] || ![popOverController.contentViewController isKindOfClass:[viewController class]])
    {
        popOverController = [[UIPopoverController alloc] initWithContentViewController:viewController];
        popOverController.popoverContentSize = CGSizeMake(320, 500);

        UIBarButtonItem *buttonLocation;

        if([viewController isKindOfClass:[CommentaryViewController class]])
            buttonLocation = commentaryButton;
        else if([viewController isKindOfClass:[PropertiesViewController class]])
            buttonLocation = propertiesButton;
        else
            buttonLocation = versionsButton;

        [popOverController presentPopoverFromBarButtonItem:buttonLocation permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }
}

VersionsViewController.m

- (id)initWithDocument:(Document *)doc
{
    self = [super init];

    if(self)
    {
        self.document = doc;
        self.title = @"other title"; //does not work either

        //I just tried everything I could think of :P
        self.navigationController.navigationBar.tintColor = [UIColor orangeColor];
        self.navigationItem.titleView.backgroundColor = [UIColor redColor];
        self.navigationController.navigationItem.titleView.backgroundColor = [UIColor greenColor];
        self.navigationController.tabBarController.tabBar.backgroundColor = [UIColor blueColor];
        self.navigationController.navigationBar.backgroundColor = [UIColor purpleColor];
    }

    return self;
}

有人能看到我做错了吗?

编辑:

来自self.title和self.navigationController.title的NSLOG都是'null'

当我创建一个navigationController时,添加视图并将navigationController添加到弹出窗口我得到2个条形图然后我可以设置navigationController的标题,但仍然不是颜色。

2 个答案:

答案 0 :(得分:2)

好奇:如果你有工作的nib文件,为什么要以编程方式重新创建它们?

initWithDocument:中,您还没有分配nvaigationController。您需要手动构建其中一个,并在其中安装VersionViewController(完成后将设置navigationController)。自动完成所有这些工作是我们使用nib文件的原因之一。

编辑任何时候“没有任何反应”检查您发送消息的对象是否为nil。当你到达时,我确定navigationController仍然是nil。您还应NSLog您关心的对象并查看其地址。您可能不小心创建了多个视图或多个导航控制器。当你尝试手工构建这些东西时,这是很常见的。在大多数情况下,笔尖是正确的解决方案。

答案 1 :(得分:0)

- (void)versions
{
    VersionsViewController *verController = [[VersionsViewController alloc] initWithDocument:document];
    [verController setDelegate:self];
    UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:verController];
    [self loadPopupView:navC];
    [verController release];
    [navC release];
}