UITableViewCell:防止重新加载单元格

时间:2014-07-23 19:21:40

标签: ios objective-c uitableview

我有一个UITableView,我用这种方式填写:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyData *myData = [arrayData objectAtIndex:indexPath.row];
    MyTableViewCell *cell = [[MyTableViewCell alloc] init:myData.title
                                                         :myData.url];
    return cell;
}

UIImageView中有一个MyTableViewCell,我按照这样加载:

- (id) init : (NSString *) parTitle : (NSString *) parUrl {
    // ...
    [self load:parUrl];
    // ...
}

- (void) load : (NSString *) url {
    NSURL *myURL = [NSURL URLWithString:url];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        image = [[UIImageView alloc] initWithFrame:CGRectMake(0, 18, 70, 65)];
        NSData *imageData = [NSData dataWithContentsOfURL:myURL];
        dispatch_async(dispatch_get_main_queue(), ^{
            // Update the UI
            [image setImage:[UIImage imageWithData:imageData]];
            image.contentMode = UIViewContentModeScaleAspectFit;
            [self.contentView addSubview:image];
            [self reloadInputViews];
        });
    });
}

问题在于,每当一个单元格从屏幕上消失时,它会在我向后滚动时重新加载其内容,但我不想要它。该怎么办?谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您只需要一个更复杂的解决方案。将下载的图像存储在模型中并预先检查,如果图像已经下载,则不要再次下载。

答案 1 :(得分:1)

  • 我认为缺少的部分是[tableView dequeueReusableCellWithIdentifier:@" CellIdentifier"]; 始终重复使用单元格。
  • 您可以缓存图像,有很多方法可以为iO缓存图像。 Best way to cache images on ios app?