2013-07-03 31 views
1

我知道这已经被广泛讨论过了,我敢肯定,我只是错过了一些东西,但是像我之前的许多其他人一样,我遇到了单元重用问题一个UITableView ... 我有一个按钮,显示一个头像,我第一次异步下载,然后将其缓存以备后用...... 当我在第一次下载图像时在我的tableview中滚动,化身错误地出现在被重用细胞,尽管我设置化身一个默认的头像在开始下载前,所以我在这里希望有人会知道解决的办法......iOS:UITableViewCell重用,改变按钮的图像

在的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直到下载正确的图像?

+0

您是否通过此设置了断点或跟踪?在waitingCell = [tableView dequeueReusableCellWithIdentifier:'''waiting'ell' ever'nil' after'waitingCell = [tableView dequeueReusableCellWithIdentifier:'? –

+0

什么是completeCell?你在哪里以及如何定义它? – rdelmar

+0

rdelmar,啊我的错误,那只是一个C&P错误,因为我后面有另一个单元命名,而且我在那里错误地选择了C&P - 但在我的代码中它正确地命名为waitingCell :)也编辑了上面的代码... Marcus,所有行在第一次遇到时都是零,但我开始意识到问题可能在于我的缓存而不是单元重用,因为在设置临时映像时单元是零。(如果这使得任何感觉到你) – user969043

回答

0

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