iOS:重新加载UICollectionView的单个单元格

时间:2014-09-07 06:26:56

标签: ios objective-c uicollectionview nsindexpath

我正在尝试按照以下帖子重新加载UICollectionView中的单元格:

UICollectionView update a single cell

我知道我最终想要的东西看起来像这样:

[self.collectionView reloadItemsAtIndexPaths:??];

但我不知道如何查找并传递特定单元格的indexPath。任何人都可以提供任何指示吗?

我有一个NSMutableArray,它包含所有单元格信息(在每个单元格中生成的imageViews)。理想情况下,我想要做的是传递NSMutableArray的索引来刷新页面上的相应单元格。但我不确定数字索引如何转换为indexPath。

提前感谢您的帮助!

5 个答案:

答案 0 :(得分:20)

这取决于您的实现以及如何将单元格分组为多个部分,但我们假设您有一个部分,并且数组中的每个元素都对应于表格中的一行。

如果你想在索引x重新加载对应于数组元素的单元格,你需要做的就是写

[_collectionView performBatchUpdates:^{
    [_collectionView reloadItemsAtIndexPaths:@[[NSIndexPath x inSection:0]]];
} completion:^(BOOL finished) {}];

相反,如果您有单元格但想要找到其索引路径,则可以随时调用[collectionView indexPathForCell:myCell]

答案 1 :(得分:8)

玩具必须传递一个包含您要重新加载的indexPaths的数组。

[self.collectionView reloadItemsAtIndexPaths: indexpathArray];

NSIndexPath有一些属性名称部分和行,两者都代表一个单元格。如果您的集合视图包含单个部分,则可以通过设置其section = 0;

来创建NSIndexPath
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:rowIndex inSection:0];

此处rowIndex是您的数组索引。顺便说一下你必须用新创建的索引路径创建一个数组,然后将其传递给reloadItemsAtIndexPaths

希望这会有所帮助.. :)

答案 2 :(得分:2)

<强>的OBJ-C

NSMutableArray *indexPaths = [[NSMutableArray alloc] init]    
[indexPaths addObject:indexPath];
[self.collectionView reloadItemsAtIndexPaths: indexPaths];

Swift 4.0

var indexPaths = [IndexPath]()
indexPaths.append(indexPath) 

if let collectionView = collectionView {
    collectionView.reloadItemsAtIndexPaths(indexPaths)
}

答案 3 :(得分:0)

您可以在Swift 5中使用这种方式:

CollectionView.reloadItems(at: IndexPath])

答案 4 :(得分:-2)

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSDictionary *dic = @{@"option":[NSNumber numberWithBool:YES]};
    [self.array insertObject:dic atIndex:indexPath.row];

    [collectionView reloadItemsAtIndexPaths:@[indexPath]];
}