Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UICollectionviewCells中嵌入UIViewController_Ios_Design Patterns_Uiviewcontroller_Uicollectionview - Fatal编程技术网

Ios 在UICollectionviewCells中嵌入UIViewController

Ios 在UICollectionviewCells中嵌入UIViewController,ios,design-patterns,uiviewcontroller,uicollectionview,Ios,Design Patterns,Uiviewcontroller,Uicollectionview,在我的应用程序中,我有一个主页,它有一个带有多个部分的卡片/网格布局。因此,UICollectionView显然是这里的选择。但是这些卡在设计、加载数据和功能上也有很大的不同。因此,将所有这些放在一个控制器中将是麻烦、复杂和难以维护的。因此,我们认为需要将它们分离成各自的UIViewControllers。每个处理一种类型的卡,并计算其内容大小,以显示在卡中。我们的主主页控制器只负责将那些viewcontroller视图放入UICollectionView单元格中 总结一下, 具有 colle

在我的应用程序中,我有一个主页,它有一个带有多个部分的卡片/网格布局。因此,
UICollectionView
显然是这里的选择。但是这些卡在设计、加载数据和功能上也有很大的不同。因此,将所有这些放在一个控制器中将是麻烦、复杂和难以维护的。因此,我们认为需要将它们分离成各自的
UIViewControllers
。每个处理一种类型的卡,并计算其内容大小,以显示在卡中。我们的主主页控制器只负责将那些
viewcontroller
视图放入
UICollectionView
单元格中

总结一下,

  • 具有
  • collectionViewCell内的每个视图及其数据都由其自己的控制器类维护
  • 控制器的所有实例都在HomeViewController和中。-
  • 由于控制器视图的contentSize(用作collectionView布局的项目大小)计算需要加载视图和设置数据,因此,所有子视图控制器都由我们自己制作

我的问题是,这个设计选择对吗?或者您会选择什么方法来实现这样一个屏幕?由于我们创建了很多ViewController(每个单元格一个),这会影响内存或性能吗?如果我只想缓存一些ViewController,或者在用户滚动时加载它们,或者在需要将其添加到collectionView单元格时加载它们,布局CollectionView布局时,如何计算单元格的大小取决于数据和视图。

我认为您的方法是有效的,从理论角度来看,将视图与其数据分离是有意义的。但是,在本例中,我更希望UICollectionViewCell子类实现自己的数据,基本上充当viewController。这将稍微简化您的代码,因为您不需要添加ViewController及其附带的代码;相反,您可以简单地将tableView添加到单元格的contentView中。这对我来说似乎更自然,因为这样您就可以让HomeViewController的collectionView在单元格移到屏幕外和屏幕上时以及在加载过程中自动处理调用其代理的操作。您无需向手机发送关于手机是谁或何时加载的信息,这些信息将自动为您处理。另外,我真的不认为在每个单元上都有视图生命周期方法是有价值的,而且不如将单元加载和刷新作为collectionView的一部分直观。无论哪种方法都有效,祝你好运

我完全理解你所说的,这似乎是一种过激的行为。可能是我说设计t时不太清楚,不同卡的加载数据差异很大。卡片内部甚至可能有一个tableView,或另一个collectionView,或一些复杂的视图集。与那些tableView代理或这些视图中的其他视图类似。所以我需要一个“处理视图及其数据的对象”,对我来说这听起来像UIViewController的定义。所以我决定使用一个viewcontroller。关于为一个分区使用viewcontroller,可能会在不同的分区中再次弹出类似类型的卡,因此在我从服务器获取数据之前,每个分区中可能存在的卡的类型都没有定义。这些信息(卡的类型、数据或其外观)在服务器端定义。因此,我将最终创建一个控制器,该控制器应该知道如何处理每种类型的卡。我现在面临着同样的问题,我所做的是拍摄视图控制器视图的屏幕截图,将其保存在缓存中,并在UICollectioVIewCell中使用该屏幕截图。在第一次使用时,一切都很好,除了一个起伏的滚动,因为它会在单元格第一次加载时创建视图并拍摄屏幕截图。需要一些建议或改进嘿,伙计们…我也需要…你们找到解决方案了吗?