如何延迟UICollectionViewCell的加载特定内容

时间:2015-08-26 09:31:19

标签: ios objective-c uicollectionview uicollectionviewcell

我用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;
}

1 个答案:

答案 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];
}