2017-02-21 47 views
1

我的表更新单元有两个类型的细胞的UITableViewController:从下载到DONE

  • 下载 - 包括UIProgressView
  • 完成 - 表明我们下载

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

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

什么机制适用于表视图控制器,以了解操作完成?

+1

[NSNotificationCenter(https://developer.apple.com/reference/foundation/nsnotificationcenter)应该帮助 – paper1111

回答

1

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

让我知道你是否需要更多的细节。

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) 
    }) 
} 

您无需承担显示器的进步和donw下载按钮,独立的单元。在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

相关问题