重新使用自定义UITableViewCells,在加载新图片之前,请简要查看旧的UIView图片

时间:2015-04-13 04:13:45

标签: objective-c uitableview uiview uiimageview reuseidentifier

我有一个包含UIView的自定义UITableViewCell,我在其中显示了几张图片。

在我的tableView:cellForRowAtIndexPath:函数中,我调用dequeueReusableCellWithIdentifier:重用旧的自定义单元格,然后用新图片更新它们。

问题在于,当我在屏幕上快速滚动时,在新照片加载之前,我会看到旧照片的闪烁,这是没有吸引力的。

我试图解决这个问题:

  • 在自定义TableViewCell实现文件中实现prepareForReuse;这导致了同样出现的三个UIViews,在这种情况下,新图片完全停止加载
  • 通过使用for循环删除所有子视图,在调用dequeueReusableCellWithIdentifier之后立即清除UIView;该应用程序现在需要很长时间来加载图片。

解决此问题的最佳方法是什么?为什么我的尝试修复程序中出现上述错误?这是我目前的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *cellIdentifier = @"Blah";
    blahCell *someCell = (blahCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (!someCell) {
        //initialize cell
    } else {

        someCell.imageContainerView = nil;
    }

    ... (other code here)
}

2 个答案:

答案 0 :(得分:0)

您可以AFNetworking使用此UIImageView 类别

每当你必须设置一个新图像时,你只需要调用

[someCell.imageContainerView setImageWithURL:url placeholderImage:placeholderImage];

现在,无论何时滚动,如果未加载图像,您将看到占位符图像,而不是看到以前的单元格图像。

答案 1 :(得分:0)

我尝试将单元格的imageView属性设置为nil,作为表格视图数据源方法cellForRowAtIndexPath的第一步。