ContainerView具有多个嵌入segues

Ste*_*ley 45 objective-c ios segue ios6

有没有办法让一个ContainerView具有多个嵌入段?目的是让ContainerView根据按下的按钮保持几个不同的ViewControllers; 一次只能看到一个.我想使用嵌入segues,这样在Interface Builder中,故事板会自动显示与ContainerView相同的大小.

我意识到我可以手动调整InterfaceBuilder中的其他ViewControllers,但我想要嵌入segue提供的自动调整大小.如果可以采用另一种方式,那也没关系.没有在viewDidLoad上加载视图很好 - 如前所述,显示的ViewController可以根据按下的按钮进行更改.

rde*_*mar 45

不,没有办法将多个嵌入segue放到一个容器视图中.在IB中进行所有设置的一种方法是使嵌入式控制器成为UITabBarController(隐藏标签栏).然后,您可以根据需要在选项卡中包含任意数量的控制器,并使用UITabBarController的selectedIndex属性在代码中切换到它们.

  • 我意识到这是一个古老的答案.我解决这个问题的方式,没有真正考虑它,就是拥有多个视图容器,当时只有一个可见.不知道这是不是最好的方法,但它运作正常. (11认同)

小智 15

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

你得到你的容器并且可以调用后面的任何视图控制器,有一些设置可以将所有内容链接起来但是一旦完成,你就会得到一个仍然可用的故事板.

  • 我在[此链接](https://web.archive.org/web/20170605234158/http://sandmoose.com/post/35714028270/storyboards-with-custom-container-视图控制器)。这是一个了不起的解决方案,作者将代码发布在一个仍然存在的 [github 项目](https://github.com/mluton/EmbeddedSwapping) 中。 (4认同)
  • 链接已售罄:( (2认同)

Ube*_*son 14

我认识到这个问题有点老了,但我想回答一下你还在寻找或其他人发现这个问题.我有一个类似的问题,我解决了它.

简而言之,您将拥有三个层:
- 外部视图控制器("ExternalViewController")
- 视图控制器管理器("ViewControllerManager")
- 您实际想要切换的子视图控制器("ChildViewController")

在ExternalViewController中使用容器视图,并在ViewControllerManager中嵌入segue.然后,ViewControllerManager本身将按照Apple文档中的描述编程方式保存其他ChildViewControllers ,特别是有关添加和删除子项的部分.

添加子视图控制器时,将其框架设置为与ViewControllerManager的框架相同(因为您在ViewControllerManager中执行此操作,将子框架设置为等于self.view.frame).当然,您还需要一些逻辑和一个外部控件来进行ExternalViewController内部的切换.

希望这可以帮助!


And*_*rej 14

是的,我能够通过@rdelmar帖子实现您所寻求的灵感.您需要做的是将a嵌入UITabBarViewController到容器视图中.然后以编程方式选择要呈现的控制器.您可能还想隐藏标签栏.

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

如果需要,还可以隐藏故事板文件中显示的标签栏

您可以通过继承UITabBarController来选择要显示的视图控制器:

override func viewDidLoad() {
    super.viewDidLoad()
    self.selectedIndex = 1
}
Run Code Online (Sandbox Code Playgroud)

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

  • 你可以在'prepareForSegue'方法中做到这一点.这样的事情:'警卫让tabBarVC = segue.destination为?UITabBarController else {return}'然后'tabBarVC.selectedIndex = 5'.也许自从我在手机上打字以来我犯了一些错误,但希望这个想法很明确. (2认同)