我有一个带有容器视图的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中添加导航项?
编辑:
这是一个截图: 右侧的TVC记录(null)self.parentViewController。
答案 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];
}