如何连续更新一堆表格单元格上的滑块?

Posted

技术标签:

【中文标题】如何连续更新一堆表格单元格上的滑块?【英文标题】:How to update a slider on a bunch of table cells continuously? 【发布时间】:2017-09-14 01:03:33 【问题描述】:

我尝试的第一种方法由于破坏布局而导致错误,但基本上是我的问题:在有一个表格视图,其单元格都有滑块/进度视图。如果用户点击下载,这些滑块上的值需要等于附加项目(我将 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 时,滑块才会采用其当前下载值。

如果正在下载,如何持续更新表格视图单元格?

【问题讨论】:

不确定,但也许在主线程中运行这个“downloadLoader.progress = Float(progress)”会起作用吗? 什么意思?它必须反复设置到滑块,我不会设置一个计时器来一遍又一遍地做这件事 【参考方案1】:

您应该在主线程中运行 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()
    

【讨论】:

谢谢,正在路上。 不工作。只是清除所有其他未下载的单元格,并且下载不流畅

以上是关于如何连续更新一堆表格单元格上的滑块?的主要内容,如果未能解决你的问题,请参考以下文章

在某些单元格上禁用UITableView滚动

在表格视图中按下单元格上的按钮时如何创建新单元格

自定义表格视图单元格上的多个图像(Swift)

iOS - 如何查看表格视图单元格上的“滑动删除”操作?

如何使表格视图单元格上的按钮调用正确的 tableView:cellForRowAtIndexPath?

动态更改静态单元格上的节标题文本