0

我正在尝试制作 UITableView。但是我的表格错误是,当它滚动时(当一个单元格被隐藏然后再次显示时)它会重置选项卡并再次从服务器加载图像。我怎样才能让它不加载图像或保留以前的单元格

static NSString *myIdentifier = @"myIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:myIdentifier];
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:myIdentifier];


    backImage =  [[UIImageView alloc] initWithFrame:CGRectMake(2, 4, 300, 62)];
    userDp    = [[UIImageView alloc] initWithFrame:CGRectMake(11, 10, 50, 50)];
    name            = [[UILabel alloc] initWithFrame:CGRectMake(67, 12, 176, 20)];

    name.font            = [UIFont fontWithName:@"HelveticaLTStd-Bold"   size:12];

CustomActivityViewer *imgIndicator = [[CustomActivityViewer alloc] initWithView:userDp];
[imgIndicator startAnimating];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0),^{
    UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", IMAGE_URL, player.imagePath]]]];

    dispatch_async(dispatch_get_main_queue(), ^{
        [imgIndicator stopAnimating];
        if (img != nil)
            userDp.image = img;

        [imgIndicator stopAnimating];
    });
});

[name setShadowColor:[UIColor blackColor]];
[name setShadowOffset:CGSizeMake(1, 1)];
name.textColor = [UIColor colorWithRed:1.0 green:0.824 blue:0 alpha:1.0];

cell.accessoryType = UITableViewCellAccessoryNone;
[cell setSelectionStyle:UITableViewCellEditingStyleNone];
cell.backgroundColor = [UIColor clearColor];

[cell.contentView addSubview:backImage];
[cell.contentView addSubview:userDp];
[cell.contentView addSubview:name];

return cell;    

}

如果我放置 if (cell!= nil) 则单元格重复自身。

该怎么办?

PS 在 iPhone 自己的教程之一中,我看到了类似 cell.contentView 设置带有标签的项目,然后如果单元格不为零,则使用标签调用视图。我找不到那个教程。万一有人知道

4

2 回答 2

1

建议这样做:

您可以(但不应该)创建自己的单元格数组,其中包含与表格中的行一样多的对象。然后在 cellForRowAtIndexPath 中,您可以简单地返回适当的单元格而不是重用它们。从技术上讲,这没有什么问题。

对于两个少数细胞,这应该没问题。但是,当表变大时,这个概念几乎肯定会导致内存问题。

您还可以维护一组(异步加载)图像,正确重用单元格并返回到您的图像数组 witin cellForRowAtIndexPath。但是,这不会对内存问题产生太大影响,因为这会为单元格视图和子视图等节省内存,但通常图像数据本身非常消耗内存。

对于未指定的行数,可能取决于用户或业务数据等并且不能被限制,除了一些更智能的缓存解决方案之外别无选择。

于 2013-04-11T09:09:30.840 回答
1

如果您不想每次都重新加载图像,则只需缓存图像。周围有很多选择,其中之一是 NSCache 或SDWebImage

于 2013-04-11T08:43:02.930 回答