使用容器视图控制器访问导航栏

Posted

技术标签:

【中文标题】使用容器视图控制器访问导航栏【英文标题】:accessing navigation bar with container view controller 【发布时间】:2012-12-06 23:23:28 【问题描述】:

编写自己的容器时关于 UINavigationController 和 UINavigatinBar 的两个问题。

1) 我用故事板创建了我的初始容器并将其嵌入到 UINavigationController 中。我发现我的 childViewControllers 访问 UINavigationBar 的唯一方法是在 childViewController 的 viewDidLoad 中执行类似的操作:

UIBarButtonItem *showDetailViewControllerBBI = [[UIBarButtonItem alloc] initWithTitle:@"Show Details" style:UIBarButtonItemStyleBordered target:self action:@selector(switchToCarouselLayout:)];
self.parentViewController.navigationItem.leftBarButtonItem = showDetailViewControllerBBI;

这是获取 UINavigationBar 的正确方法吗?

2) 我想我可以在我最初的 ContainerViewController 上添加一个 UINavigationBar。我所做的是删除我的故事板中的 UINavigatinController 并将 UINavigatinBar 放在我的 containerViewController 的顶部。当我运行项目时,没有显示导航栏。那么如果我不能在我的初始容器视图控制器中拥有它而不嵌入到 UINavigationController 中,IB 中的 UINavigationBar 实际上会做什么?还是只是为了美观而只能与 UINavigationControllers 一起使用?谢谢。

【问题讨论】:

【参考方案1】:

1) 是的,我认为这是从子视图控制器引用某些内容的好方法。另一种方法是在容器控制器本身中定义该条形按钮项,然后将目标设置为 self.childViewControllers.lastObject(假设只有一个)。

2) 这应该可以。您是拖入导航栏,还是只是将顶部栏的模拟指标更改为导航栏?后者仅用于 IB 中的视觉布局,据我所知——它实际上并没有添加一个。

【讨论】:

(1) 谢谢。尝试仍然具有导航控制器的后栏按钮功能时遇到了麻烦。 (2) 我确实从 IB 中拖了一个,但由于某种原因它没有显示... @Crystal,我并不完全清楚你想要完成什么。有关您的设置的更多详细信息会有所帮助。

以上是关于使用容器视图控制器访问导航栏的主要内容,如果未能解决你的问题,请参考以下文章

如何更改视图控制器中可访问性元素的顺序而不会失去对导航栏的访问权限?

容器中的导航栏

在标签栏中的同一标签上切换视图而不使用导航控制器

加载视图时导航栏跳跃

在容器视图中具有静态表的导航控制器

返回导航到根视图控制器后,折叠的大标题导航栏变得展开