6

假设我想实现 Pinterest 的 pin page,像这样:

兴趣

这是我的方法:

  1. make a UICollectionViewController, pin 的页面是UICollectionViewCell
  2. 单元由两个组件组成:pin info child vc &&瀑布 child vc

那么问题来了:如何重用子视图控制器?

一些伪代码:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
    Pin *pin = self.dataSource[indexPath.row];
    // i have to create a new childVC, based on different indexPath.
    UITableViewController *pinInfoViewController = [[pinInfoViewController alloc] initWithPin:pin];
    [cell updatePinViewWithPin:pin];
    [self addChildViewController:pinInfoViewController];

    // Add waterfall view controller
}

每次调用这个方法都会创建一个新的子视图控制器,可以吗,或者如何改进?

4

3 回答 3

2

我最近遇到了类似的情况,并且很难在各种解决方案之间进行选择,例如UICollectionView 中的 UIViewController 中详述的解决方案。似乎现在有一个封装了这种模式的开源项目:https ://github.com/zats/Voltron 。如果您的问题可能最好通过拥有 UIViewControllers 的 UICollectionView 来解决,那么它比尝试自己动手更容易完成。

于 2014-12-12T02:44:10.453 回答
1

我将解决此问题的方法是将UICollectionViewCell您需要的 UI 组件作为 iVar 子类化并添加到其中。当您需要使用新数据更新 UI 时,您会像现在在伪代码中一样获取单元对象,然后调用您声明的方法,可以将其updateCellWithModel:传递给数据源中保存的模型。在这种方法中,您将做一些简单的检查是否创建了 UI 元素,并在需要时创建它们,在这些类型的方法中进行健全性检查总是一个好主意,但元素应该在 init 方法中创建并且将永远在那里。

编辑:我相信我回答了你的问题,但它仍然让我感到困惑,请添加更多信息,以便我可以在需要时编辑我的答案。

于 2014-03-17T04:58:12.417 回答
0

我不认为他们在这里使用带有嵌入式表格视图的集合视图单元格。它看起来像一个专用于引脚的普通视图控制器。从服务器提取的用于该 pin 的数据可能包含有关 pin 名称、pin 链接、可能是图像、添加 pin 的所有人、原始 pinner 是谁、喜欢、收藏等信息。 ,并且视图控制器相应地解析该数据。控制器使用该数据来更新 UI,仅此而已。

我确实看到了 Pinterest 可以用于实现此视图控制器的表格视图和集合视图,但看起来他们并未将所有这些数据嵌入到集合视图单元格中。

于 2015-09-24T21:10:40.013 回答