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