具有多个embedded段的ContainerView

有没有办法让一个单独的ContainerView具有多个embedded段? 目标是让ContainerView根据按下的button来保存几个不同的ViewController; 一次只能看到一个。 我想要使​​用embed segues,这样在Interface Builder中,故事板会自动显示为与ContainerView相同的大小。

我意识到我可以在InterfaceBuilder中手动调整其他ViewControllers的大小,但是我想要通过embeddedsegue提供的自动resize。 如果有另外一种方法可行的话,那也可以。 没有视图加载viewDidLoad是好的 – 正如前面提到的,显示的ViewController可以改变取决于按下的button。

不,没有办法在一个容器视图中embedded多个嵌套。 在IB中完成所有设置的一种方法是使embedded式控制器成为UITabBarController(隐藏标签栏)。 然后,您可以根据需要在选项卡中包含尽可能多的控制器,并使用UITabBarController的selectedIndex属性在代码中切换到它们。

我发现这个精彩的文章,解释如何做到这一点: http : //sandmoose.com/post/35714028270/storyboards-with-custom-container-view-controllers

你得到你的容器,并可以调用任何视图控制器后,有一些设置为一切链接,但一旦完成,你会得到一个仍然可用的故事板。

我认识到这个问题有点老,但我想回答,以防万一你还在寻找或其他人find这个问题。 我有一个类似的问题,我的工作。

总之,你将有三层:
– 外部视图控制器(“ExternalViewController”)
– 一个视图控制器pipe理器(“ViewControllerManager”)
– 你真正想要切换的子视图控制器(“ChildViewController”)

在ExternalViewController中使用一个embedded式的容器视图到ViewControllerManager。 然后,ViewControllerManager本身将按照本文档中所述的方式以编程方式保存其他ChildViewController,特别是关于添加和删除子项的部分。

当你添加一个子视图控制器时,设置它的框架与ViewControllerManager的框架相同(因为你在ViewControllerManager中这样做,将子框架设置为self.view.frame)。 当然,您还需要一些逻辑和一个外部控制来切换ExternalViewController。

希望这可以帮助!

是的,我能够通过@rdelmar post获得灵感。 你需要做的是将UITabBarViewControllerembedded到你的容器视图中。 然后你以编程方式select你喜欢的控制器。 您可能还想隐藏标签栏。

容器视图间接包含更多的视图

如果你想,你也可以隐藏故事板文件中看到的标签栏

您可以通过inheritanceUITabBarController来select要呈现的视图控制器:

 override func viewDidLoad() { super.viewDidLoad() self.selectedIndex = 1 } 

您可以通过在viewDidLoad()中调用self.tabBarController?.tabBar.hidden = true来隐藏视图控制器中的选项卡栏。

我通过使用-shouldPerformSegueWithIdentifier:sender: 我有一个容器传递一个对象,并根据这个对象的types决定显示哪个子视图控制器。

这个结构看起来有些过于复杂,但是允许基本视图控制器忽略我拥有的不同types的任务,并将其留给容器视图控制器。 容器视图控制器然后具有多个容器视图,这些视图仅根据任务的types执行。

我不知道你是否可以通过调用-performSegueWithIdentifier:sender:手动执行embedded-performSegueWithIdentifier:sender:但是这也可能是一种可能性。