可能你会遇这种情况:collectionView每个cell是屏幕大小,然后上面添加了tableview,tableview可以上拉加载更多,当上拉加载完数据后,我们可以2种方式更新UI,如下
//第一种:简单粗暴
[self.collectionView reloadData];
//第二种: 获取cell,然后传值更新UI
GBPracticeRecordCollectionViewCell *cell = (GBPracticeRecordCollectionViewCell*)[self.collectionView
cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
但有时候在加载过程中,你会左右滑动collectionview 使得当前加载数据的cell不在屏幕内,此时通过上面方法2是无法获取cell,通过debug可知为nil,那么有什么办法呢
继续往下看
我们可以先让collectionView滚动到目标cell处,然后当滚动结束时,在scrollView的代理方法中,来获取cell,传值更新UI
//滚到目标cell上
[self.collectionView selectItemAtIndexPath:
[NSIndexPath indexPathForItem:index inSection:0]
animated:YES scrollPosition:UICollectionViewScrollPositionCenteredHorizontally];
_needOpenCellIndexPath = [NSIndexPath indexPathForItem:index inSection:0];
//获取目标cell
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
if (_needOpenCellIndexPath) {
GBPracticeRecordCollectionViewCell *cell = (GBPracticeRecordCollectionViewCell*)[self.collectionView cellForItemAtIndexPath:_needOpenCellIndexPath];
//传值
cell.practiceRecord = _practiceRecords[_needOpenCellIndexPath.item];
//结束刷新
[cell endRefreshing];
_needOpenCellIndexPath = nil;
}
}
网友评论