【发布时间】:2012-11-01 13:03:40
【问题描述】:
我很困惑为什么以及何时需要使用容器视图?我们如何通过代码实例化一个容器视图?
【问题讨论】:
我很困惑为什么以及何时需要使用容器视图?我们如何通过代码实例化一个容器视图?
【问题讨论】:
容器视图是一种视图,您可以将其拖入您的情节提要中已有的视图控制器中(我们称之为 viewControllerA)。你会自动获得一个通过嵌入转场连接到该视图的视图控制器。这个新的视图控制器有它的框架集,所以它与容器视图的大小相同——如果你调整容器视图的大小,控制器也会自动调整大小。因此,如果您愿意,可以将多个容器视图拖入 viewControllerA 中,每个视图控制器都有自己的视图控制器。在代码中,如果您需要访问这些嵌入式视图控制器,可以从 viewControllerA.childViewControllers 访问它们——这将为您提供您拥有的任何嵌入式视图控制器的数组。
在 WWDC 2012 Session Videos 视频中讨论了这些容器视图,名为“在您的应用中采用 Storyboards”。
【讨论】:
我很困惑为什么以及何时需要使用容器视图?
当人们谈论容器视图时,他们通常指的是包含其他视图的普通旧 UIView。以这种方式使用视图可以让您将其包含的所有视图作为一个组移动,以便保持它们相对于彼此的位置。它还可以轻松地将所有包含的视图作为一个组隐藏。
我们如何通过代码实例化一个容器视图?
与通常从代码中实例化 UIView 的方式相同:
CGRect frame = CGRectMake(someX, someY, someWidth, someHeight);
UIView *container = [[UIView alloc] initWithFrame:frame];
之后,您可能希望将一些子视图添加到容器中,并最终将容器添加为视图控制器视图的子视图。
另外,请注意我们在这里讨论的是 views 而不是 view controllers。人们还谈论容器视图控制器,他们的意思是可以管理其他视图控制器的视图控制器。 UITabBarController、UINavigationController 和 UISplitViewController 是 iOS 提供的容器视图控制器的示例。您可以根据需要创建自己的,但这是另一个问题的主题。
更新:从您的评论中,您显然想知道故事板编辑器中的“容器视图”项。如果将一个拖到视图中,您会看到:
视图本身是用作占位符的 UIView。
与视图一起,编辑器创建一个区域,您可以在其中编辑要由子视图控制器管理的内容。见下图。
这不仅仅是一个对象——它是多个对象。你会得到一个视图、一个子视图控制器和一个“嵌入”segue。您当然可以自己在代码中创建它们,并根据需要适当地连接它们。
【讨论】: