跨多个UICollectionViewControllers重用UICollectionView

时间:2017-06-02 22:03:49

标签: ios objective-c swift uitableview uicollectionview

我有一个表视图,其中每行包含一个collectionView。每个collectionView只有一行高并且水平滚动。所以,如果你能想象,我有几个水平滚动的旋转木马堆叠在一起。

我已经看过这种布局的几个教程,它们都有一个UIViewController,它是UITableView和所有UICollectionViews的dataSource和delegate。这允许viewController重用tableView单元格和其中的collectionViews。

由于其他一些代码重用注意事项,我想以不同的方式构建我的代码。我想有一个UITableViewController管理表,然后有UICollectionViewControllers管理每个集合视图。这确实有效,但因为UICollectionViewController包含自己的UICollectionView,所以当用户滚动显示不同轮播的表时,我无法重复使用collectionView。

最后我的问题是,您可以注入或替换UICollectionViewController使用的collectionView,以便我可以在多个View Controller之间重用视图。

2 个答案:

答案 0 :(得分:1)

嗯,我想我已经完成了你所要求的。你想要像AppStore那样的东西。

让我来描述一下我做了什么,我创建了一个自定义tableViewCell,其collectionView作为其属性,来自我的tableViewController我发送自定义tableViewCell 。现在重要的是,collectionView怎么样?所以我想如果我们将collectionView' dataSourcedelegate设置为tableViewCell怎么办?它会单独处理所有事情。我已经为delegate创建了一些tableViewCell方法来处理didSelect和其他collectionView事件。这样您就不需要collectionViewControllertableViewController而自定义tableViewCell就可以完成工作。

请告诉我是否让您感到困惑或需要任何示例代码(如果您愿意,我会稍后再添加)

修改

忘了提及您无法向另一个collectionView collectionViewController注入collectionView {/ 1}}

为了重用代码,您可以创建一个类,让我们调用CollectionViewHandler并将数据源和委托方法添加到该类,并将该类的实例分配给单个collectionView的数据源和委托。此处使用collectionViewController不适合您的情况。

答案 1 :(得分:0)

不,我认为你不能。视图只能属于一个超级视图。

就此而言,如果您有一个管理多个集合视图的视图控制器,则每个集合视图都有自己的单元队列以供重用。您将dequeueReusableCell(withReuseIdentifier:for:)发送到特定的集合视图,每个视图都维护一个单独的重用队列。

为什么您认为需要在所有收藏视图中共享所有单元格,视图?细胞重用它以避免滚动时“流失”。使用单元格重用,您一次可以在屏幕上达到最大单元格数的“高水位线”,当您滚动时,滚动屏幕外的那些将重新用于在您的集合中的其他indexPath位置显示新数据。

在我看来,你正在寻找解决不存在的问题。

你说:

  

我已经看过这种布局的几个教程,他们都有   单个UIViewController,它是dataSource和delegate   UITableView和所有UICollectionViews。这允许   viewController重用tableView单元格和里面的collectionViews   它们。

那不对。每个集合视图都有一个单独的单元队列来回收。单元格不会从一个集合视图交叉到另一个集合视图。