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

时间:2013-06-18 18:10:05

标签: ios

我有一个带有容器视图的VC(导航控制器的根VC)。容器视图嵌入了另一个VC。我相信这使得后者成为前者的儿童VC。我想从子VC的代码中向导航栏添加一个按钮。我尝试过使用parentviewcontoller,但它不起作用:

UIBarButtonItem *newConvoButton = [[UIBarButtonItem alloc] initWithTitle:@"New convo" style:UIBarButtonItemStyleBordered target:self action:@selector(newConvoInit:)];
self.parentViewController.navigationItem.rightBarButtonItem = newConvoButton;

我知道如果代码在父VC中并且我删除了“.parentViewController”,那么代码可以正常工作。

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

编辑:

这是一个截图: 1 右侧的TVC记录(null)self.parentViewController。

3 个答案:

答案 0 :(得分:12)

rdelmar在这里提供答案:interact the navigation controller bar button with embed container view

在viewWillAppear

之前无法访问父级

答案 1 :(得分:2)

我正在编写你的场景,self.parentViewController.navigationItem对我有用。你确定你调用addChildViewController吗?如果你调用addChildViewController,我只是看不到parentViewController是如何为nil的。我不得不承认,尽管self.parentViewController.navigationItem对我有用,但是如何管理导航项目,父母或孩子的管理方式有点棘手。使用典型的pushViewController样式导航堆栈,每个视图控制器往往都有自己的导航时间(UINavigationItem)。在我的情况下,我希望父母控制一些导航栏项目,但我希望孩子们添加/控制其他人。

答案 2 :(得分:1)

在viewDidAppear

-(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];
}