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

时间:2017-09-14 01:03:33

标签: ios swift download tableview nsurlsession

我尝试的第一种方法由于中断布局而导致错误,但基本上我的问题是:在一个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单元?

1 个答案:

答案 0 :(得分:0)

您应该在主线程中运行updateListCells()(如@arvidurs所写):

     <div class="wb-tabs">  
       <div class="tabpanels">      
          <details id="details-panel-panel1">
                <summary>Example 1</summary> 
                <p>                 ...             </p>        
         </details> 
        <details id="details-panel-panel2"> 
              <summary>Example 2</summary> 
               <p>              ...             </p>        
     </details>        </div>  </div>


var panel1 = ($("details-panel-panel1").attr("open")) ? true : false;
var panel2 = ($("details-panel-panel2").attr("open")) ? true : false;