为 UINavigationItem 的 titleView 设置视图控制器

Posted

技术标签:

【中文标题】为 UINavigationItem 的 titleView 设置视图控制器【英文标题】:Setting view controller for titleView of UINavigationItem 【发布时间】:2012-09-26 13:44:28 【问题描述】:

我正在创建一个推送到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】:

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

【讨论】:

您能否在此处添加该 zip 上的内容,以便我们也能理解代码?谢谢。

以上是关于为 UINavigationItem 的 titleView 设置视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UINavigationItem 类 - 标题取决于 Active UIStoryboard

为 UINavigationItem 的 titleView 设置视图控制器

将 UINavigationItem 设置为 nil 后,如何重新添加它?

ChildviewController 的 UINavigationItem

UINavigationItem 动画

从UINavigationController中控制UINavigationItem内容