在UITableViewCell内的UICollectionView上没有延迟/延迟加载

时间:2013-07-29 12:40:38

标签: ios6 uitableview lazy-loading uicollectionview

我有一个UITableViewCell,里面有一个UICollectionView。我的自定义UITableViewCell负责UICollectionView的数据源和方法。所有工作都很完美,除非我向cellForItemAtIndexPath添加一些日志记录,我看到所有UICollectionViewCells将立即加载。所以当向下滚动时会出现我的延迟/延迟加载。

这是我在自定义UITableViewCell

中的日志记录
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView                cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Loading cell: %i", indexPath.row);
}

tableViewCell高度是根据UICollectioNView需要处理的项目自动计算的。所以在我的ViewController的tableview方法中:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //return dynamically the height based on the items to show in the collectionview.
}

所以我想这是我的问题以及它为什么不进行延迟加载的原因。这有一个简单的解决方案吗?或者是这样:

Putting a UICollectionView in a UITableViewCell

来源:http://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell

这样,延迟加载只能由UITableView而不是UICollectionView处理。

以下是我的自定义UITableViewCell的完整代码,但正如您将看到的那样,这没什么特别的。

@implementation PeopleJoinedThisPlaceCell

@synthesize people = _people;

- (void)awakeFromNib
{
    collectionView.delegate = self;
    collectionView.dataSource = self;
    collectionView.backgroundColor = [UIColor clearColor];
}

- (void)setPeople:(NSArray *)people
{
    _people = people;
    [collectionView reloadData];
}


#pragma mark - CollectionViewController delegate methods

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    if(_people == NULL) return 0;
    return 1;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    if(_people == NULL) return 0;
    return _people.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView_ cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Loading cell: %i", indexPath.row);
    ImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"People" forIndexPath:indexPath];

    PFObject *userPlace = [_people objectAtIndex:indexPath.row];
    PFUser *user = [userPlace objectForKey:UserClassName];
    [cell.BackgroundImageView setImage:[UIImage imageNamed:@"photo-big-bg"]];
    [cell.ImageLoader startAnimating];
    [[UserPhotos sharedInstance] getCachedSmallPhotoForUser:user withBlock:^(UIImage *image, NSError *error) {
        [cell.ImageView setImage:image];
        [cell.ImageLoader stopAnimating];
    }];

    return cell;
}

- (void)collectionView:(UICollectionView *)collectionView_ didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    PFObject *userPlace = [_people objectAtIndex:indexPath.row];
    [_delegate gotoUserProfile:userPlace];
}

@end

0 个答案:

没有答案