Ios 如何从容器视图中嵌入的视图控制器添加导航项

Ios 如何从容器视图中嵌入的视图控制器添加导航项,ios,Ios,我有一个VC(导航控制器的根VC)和一个容器视图。容器视图嵌入了另一个VC。我相信这使后者成为前者的孩子。我想添加一个按钮到导航栏从代码为孩子的VC。我已尝试使用ParentViewController,但它不起作用: UIBarButtonItem *newConvoButton = [[UIBarButtonItem alloc] initWithTitle:@"New convo" style:UIBarButtonItemStyleBordered target:self action:

我有一个VC(导航控制器的根VC)和一个容器视图。容器视图嵌入了另一个VC。我相信这使后者成为前者的孩子。我想添加一个按钮到导航栏从代码为孩子的VC。我已尝试使用ParentViewController,但它不起作用:

UIBarButtonItem *newConvoButton = [[UIBarButtonItem alloc] initWithTitle:@"New convo" style:UIBarButtonItemStyleBordered target:self action:@selector(newConvoInit:)];
self.parentViewController.navigationItem.rightBarButtonItem = newConvoButton;
我知道如果代码在父VC中,并且我删除了“.parentViewController”,那么它就可以正常工作

那么如何从嵌入式VC添加导航项呢

编辑:

以下是一个屏幕截图:
右侧的TVC为self.parentViewController记录(null)。

rdelmar在此处提供了答案:


在ViewWill出现之前无法访问父项

我正在为您的场景编写代码,self.parentViewController.navigationItem对我有效。您确定要调用addChildViewController吗?如果调用addChildViewController,我不知道parentViewController是如何为零的。但我必须承认,尽管self.parentViewController.navigationItem对我来说很有效,但要确定谁来管理导航项,是家长还是孩子,有点棘手。对于典型的pushViewController样式的导航堆栈,每个视图控制器都有自己的导航时间(UINavigationItem)。在我的例子中,我有点希望家长控制一些导航栏项目,但我希望孩子们添加/控制其他项目

在视图中显示

-(void)viewDidAppear:(BOOL)animated
{
    UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"add_baby"]
                                                                  style:UIBarButtonItemStyleBordered
                                                                 target:self
                                                                 action:@selector(addNewBaby)];
    [self.parentViewController.navigationItem setRightBarButtonItem:rightItem];
}

self.parentViewController应该在这里工作。容器视图中的嵌入式视图控制器将自动添加为容器视图控制器的子控制器。添加以下内容:NSLog(@“我的父母:%@”,self.parentViewController)。。在子控制器的viewDidLoad方法中,告诉我它说了什么。@DhruvGoel好的,谢谢。上面写着“空”。我将用相关架构的截图更新这个问题。明白了。在我的例子中,问题是我试图从viewDidLoad访问.parentViewController,但此时未分配父对象。当我将代码移动到ViewDidDisplay时,它工作得很好。在ViewWillDisplay出现之前就可以工作。显然,如果手动添加主视图,您可能无法依赖这些视图控制器生命周期方法。