我有一个表视图,其中每行包含一个collectionView。每个collectionView只有一行高并且水平滚动。所以,如果你能想象,我有几个水平滚动的旋转木马堆叠在一起。
我已经看过这种布局的几个教程,它们都有一个UIViewController,它是UITableView和所有UICollectionViews的dataSource和delegate。这允许viewController重用tableView单元格和其中的collectionViews。
由于其他一些代码重用注意事项,我想以不同的方式构建我的代码。我想有一个UITableViewController管理表,然后有UICollectionViewControllers管理每个集合视图。这确实有效,但因为UICollectionViewController包含自己的UICollectionView,所以当用户滚动显示不同轮播的表时,我无法重复使用collectionView。
最后我的问题是,您可以注入或替换UICollectionViewController使用的collectionView,以便我可以在多个View Controller之间重用视图。
答案 0 :(得分:1)
嗯,我想我已经完成了你所要求的。你想要像AppStore那样的东西。
让我来描述一下我做了什么,我创建了一个自定义tableViewCell
,其collectionView
作为其属性,来自我的tableViewController
我发送自定义tableViewCell
。现在重要的是,collectionView
怎么样?所以我想如果我们将collectionView
' dataSource
和delegate
设置为tableViewCell
怎么办?它会单独处理所有事情。我已经为delegate
创建了一些tableViewCell
方法来处理didSelect
和其他collectionView
事件。这样您就不需要collectionViewController
仅tableViewController
而自定义tableViewCell
就可以完成工作。
请告诉我是否让您感到困惑或需要任何示例代码(如果您愿意,我会稍后再添加)
修改强>
忘了提及您无法向另一个collectionView
collectionViewController
注入collectionView
{/ 1}}
为了重用代码,您可以创建一个类,让我们调用CollectionViewHandler
并将数据源和委托方法添加到该类,并将该类的实例分配给单个collectionView
的数据源和委托。此处使用collectionViewController
不适合您的情况。
答案 1 :(得分:0)
不,我认为你不能。视图只能属于一个超级视图。
就此而言,如果您有一个管理多个集合视图的视图控制器,则每个集合视图都有自己的单元队列以供重用。您将dequeueReusableCell(withReuseIdentifier:for:)
发送到特定的集合视图,每个视图都维护一个单独的重用队列。
为什么您认为需要在所有收藏视图中共享所有单元格,视图?细胞重用它以避免滚动时“流失”。使用单元格重用,您一次可以在屏幕上达到最大单元格数的“高水位线”,当您滚动时,滚动屏幕外的那些将重新用于在您的集合中的其他indexPath位置显示新数据。
在我看来,你正在寻找解决不存在的问题。
你说:
我已经看过这种布局的几个教程,他们都有 单个UIViewController,它是dataSource和delegate UITableView和所有UICollectionViews。这允许 viewController重用tableView单元格和里面的collectionViews 它们。
那不对。每个集合视图都有一个单独的单元队列来回收。单元格不会从一个集合视图交叉到另一个集合视图。