collectionView reloadData方法不走cellForItemAtIndexPath代理

复现场景:
先在一个方法中调用

        NSIndexPath *indexPath=[NSIndexPath indexPathForRow:3 inSection:0];
        [Self.collectionView reloadItemsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]];

然后再另一个方法(请求)中调用

[Self.collectionView reloadData];

如果这里也用`reloadItemsAtIndexPaths `方法刷新单行,是可以的。但是这里的cell是创建的新的,并不是第一次创建的从缓存池里拿的。会出现一些页面滑动后上下跳动的问题。如果页面是固定的在当前页面能够显示完全,那么这个方法是可以的。

此时,断点在cellForItemAtIndexPath中不停,但是numberOfItemsInSection中会调用。

#######重点
reloadData不会创建新的cell, reloadItemsAtIndexPaths会创建新的cell,开始并不会取出缓存池的第一个cell,后面才会取缓存池的cell。

由于我的当前cell能上下滑动,因此我的刷新方法用的如下:

NSArray *visibleCellIndex = [weakSelf.collectionView visibleCells];
        for (UICollectionViewCell *cell in visibleCellIndex) {
            if ([cell respondsToSelector:@selector(updateCellWithModel:)]) {
                TCollectionCell *tcell = (TCollectionCell *)cell;
                [tcell updateCellWithModel:x];
            }
        }

经测试,如果[Self.collectionView reloadData];加延迟1s也是可以走的。
或者如果别的方法的刷新不是单行,同样是[Self.collectionView reloadData];,那么到第二次也是可以的

你可能感兴趣的:(collectionView reloadData方法不走cellForItemAtIndexPath代理)