15

我有一个带有容器视图的 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) for self.parentViewController。

4

3 回答 3

13

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

在 viewWillAppear 之前无法访问父级

于 2013-06-19T01:45:19.943 回答
3

在 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];
}
于 2014-05-26T15:28:15.093 回答
2

我正在编写您的方案,而 self.parentViewController.navigationItem 确实对我有用。你确定你调用 addChildViewController 吗?如果您调用 addChildViewController,我只是看不到 parentViewController 是如何为零的。我不得不承认,虽然 self.parentViewController.navigationItem 对我有用,但弄清楚谁管理导航项,父母或孩子,有点棘手。使用典型的 pushViewController 样式导航堆栈,每个视图控制器往往有自己的导航时间 (UINavigationItem)。就我而言,我有点希望父母控制一些导航栏项目,但我希望孩子们添加/控制其他项目。

于 2013-07-16T00:33:56.903 回答