如果我在 Storyboard 中有一个容器视图,是不是可以只将一个视图控制器嵌入到导航控制器中?

Posted

技术标签:

【中文标题】如果我在 Storyboard 中有一个容器视图,是不是可以只将一个视图控制器嵌入到导航控制器中?【英文标题】:If I have a container view in the Storyboard, is it possible to have only ONE of the view controllers be embedded in a navigation controller?如果我在 Storyboard 中有一个容器视图,是否可以只将一个视图控制器嵌入到导航控制器中? 【发布时间】:2013-12-31 16:47:03 【问题描述】:

在我的 Storyboard 中查看以下设置:

我在第一个视图控制器中有两个容器视图,一个用于显示帖子的主视图,另一个用于帖子视图滑出以显示的菜单。

我希望菜单栏滑开like described here,我可以使用它但没有导航栏。我尝试使用 Editor > Embed in Navigation Controller 到包含子项的视图控制器(有效,但是当菜单滑出it still showed for the menu which doesn't look as intended)以及当我为帖子视图控制器执行此操作时,它会因此错误而崩溃:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UINavigationController setContainingViewController:]:无法识别的选择器发送到实例 0x8e81c60”

有谁知道如何实现这个效果?

【问题讨论】:

【参考方案1】:

我认为这篇文章与 Doug Smith Why does hiding my status bar completely break my simple animation? 的这篇文章有关。您的问题与仅嵌入在导航控制器中的一个控制器无关。它崩溃了,因为您试图在 UINavigationController 而不是 PostsViewController 上调用 setContainingViewController,后者是(在添加导航控制器之前)嵌入 segue 的destinationViewController。由于导航控制器现在是destinationViewController,因此您需要将prepareForSegue中的代码更改为:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    if ([segue.identifier isEqualToString:@"Posts"]) 
        UINavigationController *nav = (UINavigationController *)segue.destinationViewController;
        PostsViewController *postsViewController = (PostsViewController *)nav.topViewController;
        postsViewController.containingViewController = self;
    
    if ([segue.identifier isEqualToString:@"Menu"]) 
        MenuViewController *menuViewController = (MenuViewController *)segue.destinationViewController;
        menuViewController.containingViewController = self;
    

【讨论】:

啊哈! Doug 和其他一些人是软件组的一部分,所以它确实是相关的。好眼力!:)

以上是关于如果我在 Storyboard 中有一个容器视图,是不是可以只将一个视图控制器嵌入到导航控制器中?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Delegate 在 ContainerView 中的 Storyboard 中创建 UITableView

在 Xcode7 - beta 5 和 storyboard 中展开 segue

如果从 Storyboard 添加约束,则 GMSMapView 不显示任何内容

将 Storyboard 视图中的所有内容移动到滚动视图中

键盘隐藏视图(AutoLayout + StoryBoard)

iOS如何获取对带有segue的storyboard容器中嵌入的视图控制器的引用?