如何在iOS 5中使用故事板创建自定义视图控制器容器

23
在iOS5中使用故事板功能,我想创建一个自定义容器,其中将嵌入两个 ViewControllers。例如,在一个 ViewController 中嵌入表视图控制器和视图控制器。
也就是说,一个视图控制器将有两个关系:
1.到表视图控制器 2.到视图控制器,该视图控制器将有4个 UIImage 视图或 UIButton
能否仅通过故事板的拖放功能创建此类关系而不需要编程?

我在您的示例中遇到了问题。CustomViewController的viewDidLoad事件从未触发...这正常吗?有没有办法解决这个问题?否则,这是一篇非常好的文章!谢谢。 - Clement M
2个回答

14
您应该只有一个视图控制器来控制场景。然而,这个viewController可能会有另外两个控制特定子视图的view controller。为了做到这一点,在您的场景viewController中创建属性,例如对于您的tableViewController和view各创建一个属性。我喜欢将它们放在一起,所以我将这两个viewControllers作为outlets,并在界面构建器中创建它们。要在界面构建器中创建它们,请从对象库中拉入一个对象,将其类型设置为相关的viewController。将其连接到您的场景视图控制器中刚创建的适当outlet上-注意:这很重要,否则如果您正在使用ARC,则viewController将被释放并崩溃您的应用程序。然后将这些viewControllers连接到您想要它们控制的视图,就完成了。
或者,如果您喜欢这样做,也可以在场景viewController中实例化并跳转到您的viewControllers。
希望这可以帮助您。
编辑:经过反思,这不是一个好主意,实际上违反了HIG,您应该为每个内容屏幕维护一个ViewController,并尝试创建一个合适的View类,让单个ViewController处理各种视图之间的交互。

3
我们可以为视图创建出口,但如何在Storyboard中为viewController创建出口? - Sayali
2
打开界面构建器并选择你的故事板。在右下角,你会看到对象库(你可以从中拉出视图控制器和视图),在搜索框中输入“object”,你会看到一个小黄/橙色的对象,将其拖到你的场景中,并在身份检查器中更改其类型为你的视图控制器。然后连接一个在你场景中的视图让它来控制,就这样了。在你的代码中,只需为你的视图控制器类有一个IBOutlet,并将对象连接到它即可。 - Scott Sherwood
2
我已经制作了一个示例,展示如何操作,你可以在这里下载源码,http://www.scott-sherwood.com/?attachment_id=564 希望对你有所帮助。 - Scott Sherwood
4
关于你的编辑,Scott:UIViewConroller Containment是在iOS 5中为了实现这个目的而添加的(允许在一个“场景”中使用多个控制器)。只是似乎文档和示例很少,非常基础或者不存在。你的例子是一个很好的开始。你有没有想过如何用UINavigationController替换UITableView? - sean woodward
@ScottSherwood,我尝试了你的示例,并认为我已经完成了所有必要的步骤(在IB中拖出一个对象,将其类标记为我的自定义视图控制器,将其连接到屏幕上的UIView,创建当前屏幕控制器内自定义视图控制器的变量并将它们连接到对象)。然而,我的自定义视图控制器视图中的控件(其中包括3个按钮、一个文本视图和一个图像视图)没有显示出来;呈现屏幕上的连接视图是空白的。你的解决方案是否不足以呈现自定义视图控制器中的控件? - Danny
显示剩余4条评论

0

有一种方法可以做到这一点,而不会太过于hacky。在下面的URL中描述了UITabBarController的方法,您可以使用列表中的第一个视图控制器来控制第一个子视图,第二个视图控制器来控制另一个子视图。或者,您可能可以调整代码以适应UISplitViewController。

http://bartlettpublishing.com/site/bartpub/blog/3/entry/351

基本上,它的工作原理是在 iOS 配置完毕后,在运行时替换 tabbarcontroller。

FYI - 从iOS 7开始,这个不再起作用了。可能有一种方法可以实现类似的效果,但我们将项目切换到了标准选项卡栏。 - johnnyb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接