为UINavigationItem的titleView设置视图控制器

时间:2012-09-26 13:44:28

标签: ios cocoa-touch uiviewcontroller uinavigationcontroller uinavigationitem

我正在创建一个推送到UINavigationController的视图控制器。我需要一个自定义的导航栏,因此我已经覆盖了我的视图控制器的navigationItem方法。在titleViewUINavigationItem的属性)中,我需要一个包含两个按钮的自定义视图。问题:如何为这两个按钮应用视图控制器?

包含两个按钮的视图在CustomTitleViewController.xib中定义,而其视图控制器在CustomTitleViewController类中定义。

这是我返回导航项(MainViewController.m)的方法:

- (UINavigationItem *)navigationItem
{
    UINavigationItem *navItem = [[UINavigationItem alloc] init];

    UIViewController *customTitleViewController =
        [[CustomTitleViewController alloc] initWithNibName:@"CustomTitleViewController"
                                                    bundle:[NSBundle mainBundle]];

    navItem.titleView = [customTitleViewController view];

    return navItem;
}

视图显示在导航栏上,正如预期的那样。但是,点击该按钮会使应用程序崩溃(EXC_BAD_ACCESS)。

错误讯息:message sent to deallocated instance 0x6e53850

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

基本上,您需要保留指向viewController及其视图的指针。只需在UINavigation控制器子类上创建强属性即可。因为你在这里做的是每次调用导航项时实例化新控制器并在函数结束时实现它。这是一个非常快速的原始修复: https://www.dropbox.com/s/y6ltdyj951ioncd/Navigating.zip 一定不要一直重新复制VC并保持指针。 希望这有帮助。