首页 文章

跨多个UICollectionViewControllers重用UICollectionView

提问于
浏览
1

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

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

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

最后我的问题是,你可以注入或替换UICollectionViewController使用的collectionView,这样我就可以在多个View Controller之间重用视图 .

2 回答

  • 0

    好吧,我想我已经完成了你所要求的 . 你想要像AppStore那样的东西 .

    让我来描述一下我做了什么,我已经创建了一个自定义 tableViewCell ,其 collectionView 作为其属性,来自我的 tableViewController 我发送我的自定义 tableViewCell . 现在重要的是, collectionView 怎么样?所以如果我们将 collectionViewdataSourcedelegate 设置为 tableViewCell 怎么办?它会单独处理所有事情 . 我创建了 tableViewCell 的一些 delegate 方法来处理 didSelectcollectionView 的其他事件 . 这样你不需要 collectionViewController 只有一个 tableViewController 和一个自定义 tableViewCell 会做一个工作 .

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

    Edit

    忘记提到你不能将 collectionViewcollectionViewController 注入另一个 collectionView

    另外,要重用代码,您可以创建一个类,让我们调用 CollectionViewHandler 并将数据源和委托方法添加到该类,并将该类的实例分配给单个 collectionView 用于数据源和委托 . 这里使用 collectionViewController 不适合您的情况 .

  • 1

    不,我认为你不能 . 视图只能属于单个超级视图 .

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

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

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

    你说:

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

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

相关问题