滚动时更新 UITableViewCell
Update UITableViewCell while scrolling
我正在尝试将图像从服务器异步加载到单元格。但是图像在滚动时不会改变,只有在滚动停止后才会改变。 "loaded" 消息仅在滚动停止后才会出现在控制台中。我希望图像在滚动时显示在单元格中。
- (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;
}
我正在使用 NSURLConnection 加载图像。我在这个答案中找到了解决方案: by Daniel Dickison
这里是:
在您停止滚动之前连接委托消息不会触发的原因是因为在滚动期间,运行 循环在 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 的文档相反,该文档建议您甚至可以在循环模式启动后更改 运行 循环模式。
我正在尝试将图像从服务器异步加载到单元格。但是图像在滚动时不会改变,只有在滚动停止后才会改变。 "loaded" 消息仅在滚动停止后才会出现在控制台中。我希望图像在滚动时显示在单元格中。
- (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;
}
我正在使用 NSURLConnection 加载图像。我在这个答案中找到了解决方案: by Daniel Dickison
这里是:
在您停止滚动之前连接委托消息不会触发的原因是因为在滚动期间,运行 循环在 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 的文档相反,该文档建议您甚至可以在循环模式启动后更改 运行 循环模式。