UITableViewController:将单元格从DOWNLOADING更新为DONE

时间:2017-02-21 05:00:46

标签: ios swift

我的桌子有两种细胞类型

  • 正在下载 - 包含UIProgressView
  • 完成 - 显示我们下载的实际内容

到目前为止,表视图控制器从Lesson.downloadLesson(25)请求下载并接收它分配给UIProgressView的Progress对象。这很好,因为屏幕会随着文件下载的发生而更新(实际上有很多步骤但是魔法隐藏在Progress后面)。

在某些时候,进度将达到100%,并且表视图控制器应重新绘制DONE样式中的单元格以显示下载内容的详细信息。

哪种机制适合表视图控制器了解操作是否已完成?

2 个答案:

答案 0 :(得分:1)

您的每个下载任务都必须封装一个回调(完成处理程序方法),该方法应该触发重写下载任务完成的单元格。您应该只重新加载已完成下载任务的单元格/行,而不是重新加载整个UITableView。

如果您需要更多详细信息,请与我们联系。

答案 1 :(得分:1)

如果您使用URLSession下载文件,那么

// Here you get finish download notification. 
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
    // 1 save file at track index(get from original download URL) and do your other app changes  
    //... save 
    dispatch_async(dispatch_get_main_queue(), {
    // 2 Reload row of trackIndex
      self.tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: trackIndex, inSection: 0)], withRowAnimation: .None)
    })
}

您无需为显示进度选择单独的单元格,也不需要下载按钮。在tableView(_:cellForRowAtIndexPath:)

// Check local file exist or not
let downloaded = localFileExistsForTrack(track)

// Set UI accordingly 
var showDownloadControls = false
if let download = activeDownloads[track.previewUrl!] {
  showDownloadControls = true

  cell.progressView.progress = download.progress
  cell.progressLabel.text = (download.isDownloading) ? "Downloading..." : "Paused"
}
cell.progressView.hidden = !showDownloadControls
cell.progressLabel.hidden = !showDownloadControls

检查此任务nsurlsession-tutorial-getting-started

的非常好的示例