UICollectionViewCell中的子视图控制器

时间:2014-03-17 04:06:07

标签: ios objective-c uicollectionview childviewcontroller

假设我想要实现Pinterest的pin页面,就像这样:

pinterest

这是我的方法:

  1. 制作UICollectionViewController,pin页面为UICollectionViewCell
  2. cell由两个组成部分组成:pin info child vc&&瀑布儿童vc
  3. 然后出现问题:如何重用子视图控制器?

    一些伪代码:

    - (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
    }
    

    每次调用此方法时,都会创建一个新的子视图控制器,没问题,或者如何改进它?

3 个答案:

答案 0 :(得分:2)

我最近遇到了类似的情况,并且在UIViewController within UICollectionView中详述的各种解决方案之间挣扎。似乎有一个开源项目现在可以封装这种模式:https://github.com/zats/Voltron。如果通过使用UIVollectionView的UIViewControllers可以最好地解决问题,那么它比尝试自己编译更容易实现。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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