【问题标题】:Reuse UICollectionView across multiple UICollectionViewControllers跨多个 UICollectionViewController 重用 UICollectionView
【发布时间】:2017-06-02 22:03:48
【问题描述】:

我有一个表格视图,其中每一行都包含一个 collectionView。每个collectionView只有一行高并且水平滚动。所以,如果你能想象,我有几个水平滚动的轮播,它们相互堆叠。

我已经看过一些关于这种布局的教程,它们都有一个 UIViewController,它是 UITableView 和所有 UICollectionViews 的数据源和委托。这允许 viewController 重用 tableView 单元格和其中的 collectionViews。

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

最后我的问题是,您能否注入或替换 UICollectionViewController 使用的 collectionView,以便我可以跨多个视图控制器重用视图。

【问题讨论】:

    标签: ios objective-c swift uitableview uicollectionview


    【解决方案1】:

    好吧,我想我已经完成了您的要求。你想要像 AppStore 一样的东西。

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

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

    编辑

    忘了提到你不能将collectionViewControllercollectionView 注入另一个collectionView

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

    【讨论】:

      【解决方案2】:

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

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

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

      在我看来,您正在寻求解决一个不存在的问题。

      你说:

      我已经看过一些关于这种布局的教程,它们都有 一个 UIViewController,它是数据源和委托 UITableView 和所有 UICollectionViews。这允许 viewController 重用 tableView 单元格和里面的 collectionViews 他们。

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

      【讨论】:

      • 抱歉,我认为我的解释不正确。我不想只有一个 UICollectionViewController。这是一个示例:我有 1 个包含 20 行的表。每行包含一个可水平滚动的collectionView(轮播)。在任何时候,屏幕上都只能看到 4 个 collectionView。所以我想要 4 个 collectionViews 但 20 个 UICollectionViewControllers(每个都维护相关行的数据和状态)。当一行在屏幕上滚动时,我想从重用的 tableView 单元格中获取 collectionView 并将其注入该行的 UICollectionViewController 中。
      猜你喜欢
      • 2018-08-12
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 2011-02-09
      • 2014-01-20
      • 1970-01-01
      相关资源
      最近更新 更多