什么是iOS 5 SDK中的容器视图?

我很困惑,为什么,当我们需要使用容器视图? 以及如何通过代码实例化Container View?

容器视图是一个视图,您可以拖动到您的故事板中已有的视图控制器之一(我们将调用此viewControllerA)。 您可以通过embedded式连接自动获取连接到此视图的视图控制器。 这个新的视图控制器有它的框架集,所以它的大小与容器视图相同 – 如果调整容器视图的大小,控制器也会自动resize。 所以,如果你愿意的话,你可以将多个容器视图拖放到viewControllerA中,并且每个视图都有自己的视图控制器。 在代码中,如果你需要访问这些embedded式视图控制器,他们可以从viewControllerA.childViewControllers访问 – 这将给你一个你拥有的任何embedded式视图控制器的数组。

在WWDC 2012会话videovideo中有一个关于这些容器视图的讨论,名为“在您的应用中采用故事板”。

我很困惑,为什么,当我们需要使用容器视图?

当人们谈论容器的意见,他们通常意味着只是一个普通的旧的UIView包含其他意见。 以这种方式使用视图可以将所有包含的视图作为一个组来移动,以保持它们相对于彼此的位置。 它也可以很容易地隐藏所有包含的视图作为一个组。

以及如何通过代码实例化Container View?

同样的方式,你会从代码正常实例化一个UIView:

CGRect frame = CGRectMake(someX, someY, someWidth, someHeight); UIView *container = [[UIView alloc] initWithFrame:frame]; 

之后,你可能会想要添加一些子视图到容器中,并最终添加容器作为视图控制器视图的子视图。

另外请注意,我们正在讨论视图,而不是在这里查看控制器 。 人们也谈论容器视图控制器,它们是指可以pipe理其他视图控制器的视图控制器。 UITabBarController,UINavigationController和UISplitViewController是iOS提供的容器视图控制器的示例。 如果你愿意,你可以创build自己的,但这是另一个问题的主题。

更新:从你的评论,你显然想知道故事板编辑器中的“容器视图”项目。 如果你拖一个视图,你会看到:

  1. 视图本身是一个用作占位符的UIView。

  2. 与视图一起,编辑器创build一个区域,您可以在其中编辑由子视图控制器pipe理的内容。 看下面的图片。

IB中的容器视图

这不只是一个对象 – 这是几个。 你得到一个视图,一个子视图控制器,和一个“embedded”赛格。 你可以自己创build代码,如果你愿意的话可以适当地连接它们。