ios - 为 UINavigationItem 的 titleView 设置 View Controller

标签 ios cocoa-touch uiviewcontroller uinavigationcontroller uinavigationitem

我正在创建一个被推送到UINavigationController的 View Controller 。我需要一个自定义的导航栏,因此我重写了 View Controller 的 navigationItem 方法。在 titleView (UINavigationItem 的属性)中,我需要一个包含两个按钮的自定义 View 。问题:如何为这两个按钮应用 View Controller ?

包含两个按钮的 View 在 CustomTitleViewController.xib 中定义,而其 View Controller 在 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;
}

View 按预期显示在导航栏上。但是,点击按钮会使应用程序崩溃 (EXC_BAD_ACCESS)。

错误消息:消息发送到已释放的实例 0x6e53850

有什么想法吗?

最佳答案

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

关于ios - 为 UINavigationItem 的 titleView 设置 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12603169/

相关文章:

iphone - 获取随机 NSDictionary 键?

objective-c - 为什么这个 UIImageView 自动居中?

ios - 导航栏下的模态视图 Controller - Swift

objective-c - 调用 UIView 的 removeFromSuperview 是否足够,或者是否需要删除 UIViewController?

ios - 设置 UIKeyboard 附件 View 时遇到问题

iphone - 使用递归 block 时的 EXC_BAD_ACCESS

ios - 关于滚动到底部的崩溃太多

ipad - UIView setFrame问题

objective-c - 当我设置 anchor 时,我的图像没有加载

ios - UITableview 从 Firebase 加载数据和重复行