我有一个 tableViewController
,当它加载一个单元格时,它会调用另一个类 DownloadData
,它是一个 UIOBject
,它会初始化一堆数据的。该类调用下载文件的下载器。我不想等待下载此文件来初始加载我的表,但该表具有用于下载数据的字段。我想在完成后刷新我的表格。下载完成后调用方法:
- (void) URLSession:(NSURLSession *)session
downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location
它在 DownloadData
类中。使上述方法在调用时强制更新 TableView 的最佳方法是什么?谢谢!
最佳答案
我们在我们的应用程序中进行了类似的设置。在高层次上,我们的 cellForItemAtIndexPath
会立即返回一个虚拟的“占位符”单元格,并开始下载真实单元格。当我们开始下载时,我们会将单元格传递给下载器,当下载完成时,它可以将占位符替换为图像本身(确保在主线程上执行此操作)。
看起来像这样:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UICustomCellWithImageView *cell = (UICustomCellWithImageView *)[collectionView dequeueReusableCellWithReuseIdentifier:YourCellID forIndexPath:indexPath];
[self.downloadManager downloadImageForCell:cell
completionBlock:^(){
[cell setPlaceholderHidden:YES animated:YES];
}];
return cell;
}
在您的下载器上:
- (void)downloadImageForCell:(UICustomCellWithImageView *)cell (void(^)())completionBlock {
[self downloadImageWithCompletion:^(UIImage img) {
dispatch_async(dispatch_get_main_queue(), ^{
cell.imageView.image = img;
if (completionBlock) {
completionBlock();
}
}
}
请原谅任何编译器错误,我只是在这个窗口中写了一些示例代码,事实证明 obj-c 是一种很难在没有编译器/自动完成的情况下编写的语言 =)。我们的比这复杂一点,因为我们事先不知道图像的大小,而且我认为我们的下载程序不知道我们的自定义单元格类,但为了简单起见,我只是这样写的概念。
关于ios - 下载完成后如何更新 UITableViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24024970/