嵌套 UICollectionViews 的问题

Posted

技术标签:

【中文标题】嵌套 UICollectionViews 的问题【英文标题】:Issue with nested UICollectionViews 【发布时间】:2012-12-06 10:32:13 【问题描述】:

我有 2 个嵌套的 UICollectionView。外部集合视图的委托是主视图控制器,内部集合视图委托是外部集合视图的 UICollectionCell。

外部集合视图只有一个标签和内部集合视图 - 通常会有七个,内部集合视图应该包含 3 或 4 个单元格(包含 3 个标签)。

问题在于内部集合视图似乎只更新了两次(对于外部视图中的前 2 组数据),然后它们重复。

这是外部 UICollectionView 的 cellForItemAtIndexPath

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"Main Tide Data Table Cell";

    TideDataTableCell* tideDayDataCell = [self.tideDataTable dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
    tideDayDataCell.tideDataTable.delegate = tideDayDataCell;
    tideDayDataCell.tideDataTable.dataSource = tideDayDataCell;
    tidalDate* tideDate = self.tidalDates[indexPath.row];
    tideDayDataCell.thisTidalDate = tideDate;
    tideDayDataCell.dayLabel.text = tideDate.dateString;
    tideDayDataCell.averageTideHeight = self.avgTideHeight;

    tideDayDataCell.backgroundColor = [UIColor whiteColor];
    self.tideDataTable.backgroundColor = [UIColor lightGrayColor];
    return tideDayDataCell;

...这里是第二个 UICollectionView 的 cellForItemAtIndexPath,它位于 UICollectionViewCell 对象中,用于输出 UICollection 视图!

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

    NSString* CellIdentifier = @"Tide Info Table Cell";

    TidalTideTableCell* tidalTideTableCell = [self.tideDataTable dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
    tidalTideTableCell.timeTideLabel.text = @"";
    tidalTideTableCell.heightTideLabel.text = @"";
    tidalTideTableCell.hwlwTideLabel.text = @"";
    self.tideDataTable.backgroundColor = [UIColor clearColor];
    Tide* tide = self.thisTidalDate.tides[indexPath.row];
    tidalTideTableCell.heightTideLabel.text = [[NSNumber numberWithDouble:tide.height] stringValue];
    if (tide.height > self.averageTideHeight)
    
        tidalTideTableCell.hwlwTideLabel.text = @"HW";
    
    else
    
        tidalTideTableCell.hwlwTideLabel.text = @"LW";
    
    tidalTideTableCell.timeTideLabel.text = tide.date;
    tidalTideTableCell.backgroundColor = [UIColor clearColor];
    return tidalTideTableCell;

我希望这是有道理的 - 请询问是否不是...我只是不明白为什么前 1 组数据可以,然后接下来的 5 组数据不行...

【问题讨论】:

【参考方案1】:

这已通过在母(外部)UICollectionView 的 dequeue 方法中调用 [UICollectionView refreshdata] 解决

【讨论】:

您在使用此设计时是否在管理选择方面遇到问题? 嗨... 我使用的集合视图没有进行选择的功能 - 它们显示数据表。一个建议是确保您正在使用的代理设置正确并正确传播(取决于您对用户选择采取行动的位置。) 确实如此。这很棘手。为了正确呈现选择,必须在最外层/父集合视图中处理它。 你指的是什么dequeue方法?您可以将您的答案粘贴到答案中以供参考吗?抱歉,我知道这是几年后的事了…… 在这个问题上浪费了这么多时间。然而解决方案是如此简单:|

以上是关于嵌套 UICollectionViews 的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS Objective C 的嵌套 UICollectionViews 中从 Child UICollectionViewCell 的 UIButton 将值传递给新的 UIViewCon

Swift 中 UITableViewCell 中的同步滚动 UICollectionViews

iOS 8 中的嵌套 CollectionView、自动布局和旋转

iOS UICollectionViews 和自动布局

单个 UIViewController 上的 2 个 UICollectionViews,具有不同数量的部分

从多个 UICollectionVIews 内的 UICollectionViewCell 推送新的 UICollectionViewController