我知道这已经被广泛讨论过了,我确信,我只是简单地遗漏了一些东西,但和我之前的许多其他人一样,我在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直到下载正确的图片?
答案 0 :(得分:0)
好的,所以我找到了另一种方法而不是我目前正在使用的方法......主要的问题是,当我使用后端服务Parse时,我必须首先下载其他一些信息,然后才能获得访问文件本身,这似乎导致了一些奇怪的图像重用,所以我找到了一种方法来在API中继承UITableViewCell似乎有帮助......