我正在尝试按照以下帖子重新加载UICollectionView中的单元格:
UICollectionView update a single cell
我知道我最终想要的东西看起来像这样:
[self.collectionView reloadItemsAtIndexPaths:??];
但我不知道如何查找并传递特定单元格的indexPath。任何人都可以提供任何指示吗?
我有一个NSMutableArray,它包含所有单元格信息(在每个单元格中生成的imageViews)。理想情况下,我想要做的是传递NSMutableArray的索引来刷新页面上的相应单元格。但我不确定数字索引如何转换为indexPath。
提前感谢您的帮助!
答案 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]];
}