在UICollectionviewCells中嵌入UIViewcontrollers

时间:2014-12-10 17:23:35

标签: ios design-patterns uiviewcontroller uicollectionview

在我的应用程序中,我有一个主页,其中有多个部分的卡/网格布局。所以UICollectionView是明显的选择。但是这些卡在设计,加载数据和功能方面也有很大差异。因此,将所有这些放在一个控制器中将是繁琐,复杂且难以维护的。所以我们认为我们需要将它们分成自己的UIViewControllers。每个处理一种类型的卡并计算其contentSize以显示在卡内。我们的主要主页控制器只负责将viewcontroller个视图放在UICollectionView个单元格中。

总结一下,

  • 具有CollectionView
  • 的HomeViewController
  • collectionViewCell中的每个视图及其数据都由其自己的控制器类维护。
  • 控制器的所有实例都在HomeViewController内,added as its children .- Apple Guide
  • The appearance call对所有子视图控制器都是我们自己创建的,因为contentSize(用作collectionView布局的项目大小)计算控制器视图需要加载视图并且数据是集。

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

1 个答案:

答案 0 :(得分:1)

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