滚动时更新UITableViewCell

时间:2015-01-06 20:15:44

标签: ios objective-c uitableview

我试图异步地将图像从服务器加载到单元格。但滚动时图像不会改变,只有在滚动停止后。 "装载"仅在滚动停止后,消息才会显示在控制台中。我希望滚动时图像出现在单元格中。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    CustomCell *cell = (CustomCell *)[_tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
    ZTVRequest *request = [[ZTVRequest alloc] init];
    [request getSmallImg completionHandler:^(UIImage *img, NSError *error) {
        if (! error) {
            NSLog(@"loaded")
            cell.coverImgView.image = img;
        }
    }];

    return cell;
}

1 个答案:

答案 0 :(得分:1)

我使用NSURLConnection加载图片。我在这个答案中找到了解决方案: Daniel Dickison

https://stackoverflow.com/a/1995318/1561346

这是:

连接委托消息在您停止滚动之前不会触发的原因是因为在滚动期间,运行循环位于UITrackingRunLoopMode。默认情况下,NSURLConnection仅在NSDefaultRunLoopMode中安排自己,因此您在滚动时不会收到任何消息。

以下是如何在" common"中安排连接的方法。模式,包括UITrackingRunLoopMode

NSURLRequest *request = ...
NSURLConnection *connection = [[NSURLConnection alloc]
                               initWithRequest:request
                               delegate:self
                               startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop currentRunLoop]
            forMode:NSRunLoopCommonModes];
[connection start];

请注意,您必须在初始化程序中指定startImmediately:NO,这似乎与Apple的文档背道而驰,该文档建议您即使在启动后也可以更改运行循环模式。