使用 reloadItemsAtIndexPaths 重新加载 UICollectionViewCell 的 footerView
Posted
技术标签:
【中文标题】使用 reloadItemsAtIndexPaths 重新加载 UICollectionViewCell 的 footerView【英文标题】:Reload footerView of UICollectionViewCell with reloadItemsAtIndexPaths 【发布时间】:2014-05-16 21:13:05 【问题描述】:我正在使用 CollectionView 来显示数据。当用户按下某个按钮时,我正在刷新 CollectionViewCell 以反映如下更改:
[self.collectionView reloadItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
这可以很好地重新加载单元格,但它不会重新加载它的页脚视图。我实现了以下方法
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
NSLog(@"FOOTER CALLED");
当我重新加载单元格时不会调用它。
如果我用 [self.collectionview reloadData] 重新加载整个集合视图,一切都可以工作,但这并不高效。
如何确保我的 UICollectionViewCell 在 indexPath 的页脚也被刷新?
【问题讨论】:
【参考方案1】:您必须使布局或重新加载部分。
使布局无效。
[[_collectionView collectionViewLayout] invalidateLayout]
重新加载该部分。使用reloadSections:
更新UICollectionView
中的1 个或多个部分。
[self.collectionView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 3)]];
【讨论】:
我都按照这个顺序实现了,它解决了我的问题,谢谢!对于那些有同样问题并想知道应该在 NSMakeRange 中使用什么值的人:NSMakeRange 与(位置,长度)一起使用。 NSMakeRange(startIndex, endIndex-startIndex)。因为我想刷新 indexPath.row 的元素,所以我使用了 NSMakeRange(indexPath.row, indexPath.row)。以上是关于使用 reloadItemsAtIndexPaths 重新加载 UICollectionViewCell 的 footerView的主要内容,如果未能解决你的问题,请参考以下文章
如果 dataSource 计数可能发生变化,是不是可以同时使用 reloadItemsAtIndexPaths 和 reloadData?
在 reloadItemsAtIndexPaths 之后避免 UICollectionView 的动画
iOS解决UICollectionView中使用reloadItemsAtIndexPaths进行局部cell更新导致视图重叠问题
reloadItemsAtIndexPaths 上的集合视图崩溃