ios - 在 UICollectionviewCells 中嵌入 UIViewcontroller

标签 ios design-patterns uiviewcontroller uicollectionview

在我的应用程序中,我有一个主页,其中有一个包含多个部分的卡片/网格布局。所以 UICollectionView 是这里显而易见的选择。但这些卡在设计、加载数据及其功能方面也有很大差异。因此,将所有这些都放在一个 Controller 中会很麻烦、复杂且难以维护。所以我们认为我们需要将它们分离到它们自己的 UIViewControllers 中。每个处理一种类型的卡片并计算其 contentSize 以显示在卡片内。我们的主主页 Controller 只负责将那些 viewcontroller View 放入 UICollectionView 单元格中。

求和,

  • 一个具有 CollectionView 的 HomeViewController
  • collectionViewCell 中的每个 View 及其数据都由其自己的 Controller 类维护。
  • Controller 的所有实例都在 HomeViewController 和 added as its children 内.- Apple Guide
  • The appearance call所有 subview Controller 的 s 都是我们自己制作的,因为 Controller View 的 contentSize(用作 collectionView 布局的项目大小)计算需要加载 View 并设置数据。

我的问题是,这个设计选择正确吗?或者你会选择什么方法来实现这样的屏幕?由于我们创建了很多 viewController(每个单元一个),这会影响内存或性能吗?如果我只想缓存一些 viewControllers 或在用户滚动时加载它们,或者在将其添加到 collectionView 单元格时加载它们,我该怎么做,因为计算该单元格的大小取决于放置时的数据和 View 出 CollectionView 布局。

最佳答案

我认为您的方法是有效的,从理论上讲,将 View 与其数据分开是有意义的。但是,在这种情况下,我更愿意让 UICollectionViewCell 子类实现自己的数据,基本上充当 viewController。这将稍微简化您的代码,因为您不需要添加的 viewController 和它们附带的代码;相反,您可以简单地将 tableView 添加到单元格的 contentView 中。这对我来说似乎更自然,因为这样您就可以让 HomeViewController 的 collectionView 在单元格移出屏幕时以及在加载过程中自动处理调用其委托(delegate)。您不需要向单元格发送有关他们是谁或何时应该加载的消息,这一切都会自动为您处理。此外,我真的不认为在每个单元格上使用 View 生命周期方法是有值(value)的,并且不如将单元格加载和刷新作为 collectionView 的一部分直观。无论哪种方式都有效,祝你好运!

关于ios - 在 UICollectionviewCells 中嵌入 UIViewcontroller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27407138/

相关文章:

ios - Firebase数据库swift的权限被拒绝

iOS 使用 JSON 参数从 AFNetworking HTTP POST 方法获取 JSON 响应

java - 使用设计模式会使 Java 代码变慢吗?

c# - 协程的替代设计模式

design-patterns - Active Records vs. Repository - 优缺点?

ios - 修改另一个 View Controller 的对象

ios - 如何制作包含 UIViewController 的 UITextView 全宽和全高

iphone - 在 cocos2d 层顶部的 uitableview 中制作自定义 uitableviewcell

ios - 安装 adMob 横幅给我奇怪的 Mach-O 链接器错误

ios - 在后台执行网络和其他耗时的任务