异步加载图像时更新tableView

时间:2013-05-16 11:24:49

标签: ios ios5 ios6 parse-platform

我使用parse异步获取图像,然后将它们插入到包含其他内容的数组中。

我返回这个数组来填充一个tableView,并且这些行有一个UIImageView,但是当我用cellForRowAtIndexPath中的数组填充表时,我得到的一些异步doest图像被加载了,所以当我首先查看tableView,我得到单元格中带有空图像的行,直到我在tableView中移动滚动,以便再次调用cellForRowAtIndexPath并且已经加载了在数组中设置的那些图像。

如果我使用[self.tableView reloadData];进行IBAction,我也可以获得图像。我得到了图像。

问题是我会中等地返回单元格并且未加载图像。 我正在使用自定义TableViewCell。 我发现了"AsyncImageView"加载图像的内容,但我不知道如何。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    //Get the game for the row
    GameModel *game = [self.currentMatches objectAtIndex:indexPath.row]; //HERE i load the images

    MatchCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"GameCell" forIndexPath:indexPath];

   cell.userImage.image = game.avatarp1; //I set the image to the cell but isnt loaded yet

   //If i do this WORKS but i get 2 times the same image (on the game and now) (its a function that i created, that seems is calling tableView or so when assigns the image to the cell, i dont understand why it works 
        [ParseModel getAvatarWithUser:game.p1 completionBlock:^(UIImage *avatar) {
            cell.userImage.image = avatar;
        }];

2 个答案:

答案 0 :(得分:0)

如果在获得dequeueReusableCell时将图像设置为nil,然后让块设置图像,该怎么办?

只需改变一下:

cell.userImage.image = game.avatarp1; 

为此:

cell.userImage.image = nil;

然后让这段代码有效(我已经通过你的回答理解这很有效)

[ParseModel getAvatarWithUser:game.p1 completionBlock:^(UIImage *avatar) {
        cell.userImage.image = avatar;
}];

希望它有所帮助!

答案 1 :(得分:0)

您可以使用“SDWebImage”替代您在问题中提到的“AsyncImageView”。它很容易实现。我在这里放了一个我自己的代码示例,我在这里以与您尝试相同的方式从单元格中的URL下载图像。 (更改我的cell.userImage的“视图”)

此方法放置临时图像(占位符,当图像完全下载时,它会自动更改(无需重新加载或滚动)。

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
    if (view == nil)
    {
        view = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 238.0f, 289.0f)] autorelease];
        //here is where you put a placeholder and download in the background the image with an URL. Items is an array of URLs
        [(UIImageView *)view setImageWithURL:[items objectAtIndex:index]
              placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
        view.contentMode = UIViewContentModeScaleAspectFit;
    }
    return view;
}

当您将SDWebImage添加到项目中时,不要忘记添加到.m中:#import< SDWebImage / UIImageView + WebCache.h>