我的桌子有两种细胞类型
UIProgressView
到目前为止,表视图控制器从Lesson.downloadLesson(25)
请求下载并接收它分配给UIProgressView的Progress
对象。这很好,因为屏幕会随着文件下载的发生而更新(实际上有很多步骤但是魔法隐藏在Progress
后面)。
在某些时候,进度将达到100%,并且表视图控制器应重新绘制DONE样式中的单元格以显示下载内容的详细信息。
哪种机制适合表视图控制器了解操作是否已完成?
答案 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
的非常好的示例