UICollectionView willDisplayCell delegate method?



无论如何,在显示单元格时,要入侵uicollectionView,以调用willdisplaycell委托方法?

我需要懒惰的加载,并且我对UaiteView的态度很好,但是正式的UicollectionView没有这种委托方法。

那么,有什么想法吗?谢谢!

fyi,已将其添加到iOS 8:

的API中
- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0);

我在 cellForItemAtIndexPath:中做类似的事情(用于懒惰的加载图像):

  • 如果我的模型具有图像,只需将单元格的图像设置为
  • 如果模型没有图像,则踢异步负载
  • 负载完成后,检查原始Indexpath是否仍然可见
  • 如果是这样,请致电cellForItemAtIndexPath进行原始IndexPath。由于该图像现在存在于模型中,因此现在将设置单元格的图像。

看起来像这样:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    PhotoCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"PhotoCell" forIndexPath:indexPath];
id imageItem = [self.photoSet objectAtIndex:indexPath.row];
        ImageManager * listingImage = (ImageManager *)imageItem;
        if(listingImage.image){
            cell.image = listingImage.image;
        } else {
            [listingImage loadImage:^(UIImage *image) {
                [collectionView reloadItemsAtIndexPaths:@[indexPath]];
                dispatch_async(dispatch_get_main_queue(), ^{
                    if ([[collectionView indexPathsForVisibleItems] containsObject:indexPath]) {
                        [(PhotoCell *)[collectionView cellForItemAtIndexPath:indexPath] setImage:image];
                    }
                });
            }];
        }
    }
    return cell;
}

您可以使用SDWebImage https://github.com/rs/sdwebimage进行懒惰加载。您可以与UICollectionView有效使用。


- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
/*---------
----Other CollectiveView stuffs------
-----------------*/
if([[NSFileManager defaultManager] fileExistsAtPath:YOUR_FILE_PATH  isDirectory:NO])
{
      imagView.image=[UIImage imageWithContentsOfFile:YOUR_FILE_PATH];
}
else
{
     UIActivityIndicatorView *act=[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
     [imagView addSubview:act];
     act.center=CGPointMake(imagView.frame.size.width/2, imagView.frame.size.height/2);
     [act startAnimating];
     __weak typeof(UIImageView) *weakImgView = imagView; 
     [imagView setImageWithURL:[NSURL URLWithString:REMOTE_FILE_PATH] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType){
    for(UIView *dd in weakImgView.subviews)
    {
        if([dd isKindOfClass:[UIActivityIndicatorView class]])
        {
            UIActivityIndicatorView *act=(UIActivityIndicatorView *)dd;
            [act stopAnimating];
            [act removeFromSuperview];
        }
    }
    NSString *extension=[YOUR_FILE_PATH pathExtension];
    [self saveImage:image withFileName:YOUR_FILE_PATH ofType:extension];
  }];
 }
}

我需要知道将要显示的单元格路径时也有类似的情况。以- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath结尾。据说,一个是" DidendDisplaying",另一个是" Willdisplayed"。

最新更新