我用UICollectionView
实现了一个日历视图,当滚动日历视图的速度非常快时,它并不流畅。所以我在想是否可以先加载每个单元格的静态内容,然后在加载特定内容后刷新。那么如何延迟加载每个UICollectionViewCell
具体来说,在下面的函数中,我将构造每个UICollectionViewCell
并返回它。现在我只想构建静态内容(例如日期),并延迟加载特定内容(例如背景颜色,如果我今天有事件,我将更改此单元格的背景),那么我应该在哪里加载特定内容,以及如何仅刷新显示单元格
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:UICollectionViewCellIdentifier
forIndexPath:indexPath];
NSDate *date = [self dateAtIndexPath:indexPath];
cell.dateLabel.text = [date description];
// This is the part I want to delay, since it's cost.
if (dataModel.hasEventAtDate(date)) {
cell.dateLabel.backgroundColor = [UIColor blue];
}
return cell;
}
答案 0 :(得分:0)
您可能需要一个实例变量来跟踪细胞是否需要更新:
Boolean cellNeedsUpdate = NO
在cellForItemAtIndexPath中,检查是否需要完全更新单元格:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
if (cellNeedsUpdate) {
// fully update the cell
} else {
// do partial update
}
}
跟踪collectionView的结束滚动,然后重新加载collectionView:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
cellNeesUpdate = !cellNeedsUpdate;
[collectionView reloadData];
}