具有多个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获得灵感。 你需要做的是将UITabBarViewController
embedded到你的容器视图中。 然后你以编程方式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:
但是这也可能是一种可能性。