UICollectionView未加载单元格

时间:2015-08-13 16:13:54

标签: ios objective-c uicollectionview reloaddata

以下是我拥有的cellForItemAtIndexPath代码:

    static NSString *cellIdentifier = @"Cell";
    MyCustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
    //do stuff, set label text

if (indexPath.section == 0) cell.label.text = [words1 objectAtIndex:indexPath.row];
else if (indexPath.section == 1) cell.label.text = [words2 objectAtIndex:indexPath.row];
else if (indexPath.section == 2) cell.label.text = [words3 objectAtIndex:indexPath.row];

    return cell;

我在viewDidLoad注册了单元格类型:

[_collectionView registerClass:[MyCustomCell class] forCellWithReuseIdentifier:@"Cell"];

我在我的故事板中设置了我的集合视图,代理和数据源正常链接。

现在我的问题......我有两种方法,都有问题。我有3个部分,每个部分都来自一个独特的数据阵列。

  1. 获取所需数据后,我使用[_collectionView reloadData]。这会根据数组计数加载正确数量的单元格,但不会填充屏幕外的单元格。因此,当我在屏幕上滚动它们时,它们没有设置标签。

  2. 除了上述内容,我尝试使用以下代码(每个部分一次)在获取数据(首选路径)时重新加载每个部分:

    [self.collectionView performBatchUpdates:^{ [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]]; } completion:nil];

  3. 然而,使用此方法的问题是,在重新加载后,它会使用正确数量的单元格填充我的集合视图,但单元格本身是空白的,标签上没有设置文本。

    在这两种情况下,如果我在屏幕上滚动非加载单元格,在屏幕外滚动并重新打开,它们将加载。但是,当你第一次看到它们时,它们并没有。

1 个答案:

答案 0 :(得分:0)

解决。放置您的UI代码,例如在UILabel方法中创建layoutSubviews(而不是nil)是不好的。

将此代码移至我的自定义init子类上的UICollectionViewCell方法,修复了我的问题,如果单元格UI不一致。