如何连续更新一堆表格单元格上的滑块?
问题描述:
我试过的第一种方法导致了错误,由于中断布局,但基本上在这里我的问题:有一个tableview的单元格都有滑块/进度视图。如果用户点击下载,则这些滑块上的值需要等于附加项目(我将RSS项目分配给每个单元格,其音乐)的下载百分比。如何连续更新一堆表格单元格上的滑块?
我打电话本功能的观察员下载进度这里:
//DOWNLOAD PROGRESS
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
let progress = Double(totalBytesWritten)/Double(totalBytesExpectedToWrite)
print("\(downloadTask.originalRequest!.url!.absoluteString) \(progress)")
updateListCells()
}
这里是我尝试更新我的细胞,使用户可以看到进度条慢慢成长 - 我已经子类化细胞:
func updateListCells()
{
if let table = listVC.myTableView {
if(!table.visibleCells.isEmpty)
{
for v in table.visibleCells {
let cell = v as! RSSTableViewCell
cell.updateLoader()
}
}
}
}
func updateLoader()
{
self.bringSubview(toFront: downloadLoader)
if(pathUrl != nil)
{
if(checkIfExists(url: pathUrl!))
{
downloadLoader.progress = 1
}
else {
for d in downloadManager.operations {
if(URL(string: rssItem.link) == d.value.task.originalRequest?.url)
{
let progress = Double(d.value.task.countOfBytesReceived)/Double(d.value.task.countOfBytesExpectedToReceive)
//print("MATCH: ", d.value.task.countOfBytesSent)
downloadLoader.progress = Float(progress)
}
}
}
}
else {
downloadLoader.progress = 0
}
}
但这并不连续工作。只有当我刷新tableview时,滑块才会采用当前的下载值。
如果下载正在发生,我该如何更新tableview单元格?
答
您应该运行updateListCells()在主线程(如@arvidurs写道):
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
let progress = Double(totalBytesWritten)/Double(totalBytesExpectedToWrite)
print("\(downloadTask.originalRequest!.url!.absoluteString) \(progress)")
DispatchQueue.main.async {
self.updateListCells()
}
}
不知道,但也许运行这个“downloadLoader.progress =浮动(进度)”在主线程将工作? – arvidurs
你是什么意思?它将不得不重复设置到滑块,并且我不打算设置一个定时器来反复地做它 – skyguy