在iOS中以编程方式创建容器视图

4

我知道如何通过Storyboard在iOS中创建容器视图,但是它不允许我在集合视图单元格中拥有一个容器视图。我希望其中一个单元格可以加载另一个控制器作为容器。我该如何实现这个功能?


嘿 Popeye,主要是当你尝试将容器视图在Storyboard中拖到集合视图单元格时,编译器会说你不能使用可重用的单元格与容器。 - moger777
那和我刚才问的有什么关系? - Popeye
1个回答

10

在我给你代码之前,你必须意识到这肯定是个坏主意。 UITableViewCells 高度可重用,并且只是由数据源支持的原始视图,而不是由真正的视图控制器支持。容器视图被设计为嵌套控制器,而不仅仅是放置在 UIView 中(如表格单元格)。但是我岔开了话题:

这里是与容器视图 相关的 Apple 文档(搜索 容器视图)。

添加和删除子项 部分:

// Adding a container view
[self addChildViewController:content];                 // 1
content.view.frame = [self frameForContentController]; // 2
[self.view addSubview:content.view];
[content didMoveToParentViewController:self];          // 3

// Removing a container view
[content willMoveToParentViewController:nil];  // 1
[content.view removeFromSuperview];            // 2
[content removeFromParentViewController];      // 3

当配置一个单元格时,它很可能已经包含了一个容器视图(来自其先前的配置)。因此,在添加新的容器视图之前,您应该尝试重复使用已经添加的内容。但是,这个解决方案并不是特别可取,但你应该已经知道这一点,因为IB已经阻止了你这样做。


目前正在使用集合视图,我是否最好只是使用一个稍微手动一些的uiscroll视图来完成各个部分(而不是可重复使用的)?我想在这种情况下,我可以直接从故事板中使用容器视图。 - moger777
@moger777,是的,那将是一个很好的替代方案。你肯定也可以用Storyboard实现,但我会说,在代码中实现会更加灵活。比如,如果你想交换两个“部分”或在当前的两个部分之间添加一个新的部分。在Storyboard中要完成这些操作需要更新很多约束条件。而在代码中做这些操作可能只需要向一个数组中添加一个新元素(在代码中循环处理以按顺序添加所有容器视图)。 - Firo
我有点困惑当前的currentClientView在这里应该是什么。 - moger777
这只是从苹果文档中复制的。它将是vc的视图。我更新了答案,使其更适合代码示例(content.view)。 - Firo
@SilviuSt 我更新了链接,不幸的是我找不到像之前那么好的文档参考,但仍然相当不错。我的回答已经包含了所有必要的信息,所以文档只是额外的参考。不过还是感谢你指出这点! - Firo

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