iOS:UITableViewCell重用,按钮更改图像

时间:2013-07-03 13:46:16

标签: ios uitableview reuseidentifier

我知道这已经被广泛讨论过了,我确信,我只是简单地遗漏了一些东西,但和我之前的许多其他人一样,我在UITableView中遇到了细胞重用的问题...... 我有一个显示头像的按钮,我第一次异步下载它,然后将其缓存以供以后使用... 当我第一次下载图像时我在桌面视图中滚动时,虚拟人物在重复使用的单元格中出现错误,尽管我在开始下载之前将头像设置为默认头像,所以我希望有人在这里知道解决方案...

在cellForRowAtIndexPath中:

WaitingCell *waitingCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierWaiting];

if (waitingCell == nil) {
    waitingCell = [[WaitingCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierWaiting];
    waitingCell.delegate = self;
}

[waitingCell.userButton setImage:[UIImage imageNamed:DefaultAvatar] forState:UIControlStateNormal];
[waitingCell.usernameLabel setText:username];
[waitingCell.scoreLabel setText:score];

__block UIImage *img;

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
    if([p1.objectId isEqualToString:currentUser.objectId])
    {
        img = [profileImages getProfileImageForUser:[p2 objectId]];
        waitingCell.user = p2;
    } else
    {
        img = [profileImages getProfileImageForUser:[p1 objectId]];
        waitingCell.user = p1;
    }

    dispatch_async(dispatch_get_main_queue(), ^{
        [waitingCell.userButton setImage:img forState:UIControlStateNormal];
    });
return waitingCell;

“userButton”的图像是在图像完全缓存之前被重用的部分,但我认为通过将其设置为默认值(DefaultAvatar是一个常量文件名),它只会设置默认的头像直到其他已下载,因此不会重复使用其他图像..

该按钮在我的自定义UITableViewCell中定义,名为WaitingCell,如下所示:

    self.userButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [self.userButton setImage:[UIImage imageNamed:PlaceholderAvatar] forState:UIControlStateNormal];
    self.userButton.frame = CGRectMake(20, 8, 51, 54);
    [self.contentView addSubview:self.userButton];

我有什么想法可以避免重复使用图片,只需使用DefaultAvatar直到下载正确的图片?

1 个答案:

答案 0 :(得分:0)

好的,所以我找到了另一种方法而不是我目前正在使用的方法......主要的问题是,当我使用后端服务Parse时,我必须首先下载其他一些信息,然后才能获得访问文件本身,这似乎导致了一些奇怪的图像重用,所以我找到了一种方法来在API中继承UITableViewCell似乎有帮助......