在UITableViewCell中,UIImageView内容在使用AFNetworking的一些单元格之后重复

时间:2015-06-08 20:58:23

标签: objective-c uitableview uiimageview afnetworking restkit

第一页上的所有单元格的内容都是不同的,但是当我们向下滚动时,只有UIImageView 重复,尽管UILabel 不同即可。

我正在使用[UIImageView setImageWithURL:(NSURL *)url]中的AFNetworking RestKit。继承人实施

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    RClubTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"RClubTableViewCell"];
    RClubObject * club = _clubs[indexPath.row];
    [cell.clubImageView setImageWithURL:[NSURL URLWithString:club.clubImageURL]];
    cell.nameLabel.text = club.clubName;
    return cell;
}

似乎iOS以某种方式使用先前创建的单元格。想滚动时拥有完全新鲜的细胞。

3 个答案:

答案 0 :(得分:0)

您需要使用非零占位符图片调用setImageWithURL:placeholderImage:,以便从图片视图中删除旧图片。

答案 1 :(得分:0)

我猜你错过了cellForRowAtIndexPath:的重新分配 你的代码应该是这样的

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    RClubTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"RClubTableViewCell"];
    if(cell == nil)
    {
       cell = [[RClubTableViewCell alloc] init];
    }
    RClubObject * club = _clubs[indexPath.row];
    [cell.clubImageView setImageWithURL:[NSURL URLWithString:club.clubImageURL]];
    cell.nameLabel.text = club.clubName;
    return cell;
}

更新:

好。我刚才有同样的问题。这里我在google上的搜索告诉我:由于你是在异步下载图像并且还在滚动,它会被下载并附加到当前可见的其他单元格

<强>解决方案:

  1. 使用indexpath.row
  2. 为每个imageView添加标记
  3. 使用函数setImageWithURL: placeholderImage:success:
  4. 成功阻止使用标记值重新加载单元格。
  5. 虽然我没有经过测试,但我觉得这应该有效。 PS:让我知道如果这有效,我也必须这样做:)

答案 2 :(得分:0)

是的,iOS正在重复使用以前创建的单元格。这就是这行代码的作用,因此应用程序不必花时间从头开始创建新单元格:

RClubTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"RClubTableViewCell"];

在为此单元格添加新图像之前,清除已回收单元格中的图像:

cell.clubImageView.image = nil;
[cell.clubImageView setImageWithURL:[NSURL URLWithString:club.clubImageURL]];
cell.nameLabel.text = club.clubName;
return cell;

或者,您可以从头开始创建一个新单元格,而不是将其单元格出现。