gpt4 book ai didi

swift - 从观察者更新 TableView Cell UI

转载 作者:行者123 更新时间:2023-11-30 11:23:46 37 4
gpt4 key购买 nike

我正在尝试在下载文件时更新单元格的 UI。我有一个监听器来跟踪下载进度。

但似乎我无法从监听器更新我的 UI,reloaddata()layoutifneeded() 都不起作用

这是一些代码:

// MARK: - VODownloader Observer

extension DownloadsTableViewControllerPhone : VODownloaderEventListener{
func onDownloadPrepared(_ downloader: VODownloader!) {
print("onDownloadPrepared")
}

func onDownloadInfoEvent(_ downloader: VODownloader!, info: Int) {

switch info {
case VODownloaderInfo.infoDownloadProgress.rawValue:
print("infoDownloadProgress")

//Example: Update first cell UI
let indexPath = IndexPath(item: 0, section: 0)
let cell = tableView.cellForRow(at: indexPath) as? DownloadsTableViewCellPhone
cell?.downloadedVideoDownloadProgressLabel.text = "Download duration \(downloader.duration) %"

//Update the UI ???
cell?.layoutIfNeeded()
tableView.reloadData()

case VODownloaderInfo.infoDownloadCompleted.rawValue:
print("infoDownloadCompleted")
case VODownloaderInfo.infoKeyoRenewalCompleted.rawValue:
print("infoKeyoRenewalCompleted")
case VODownloaderInfo.infoDownloadSpeed.rawValue:
print("infoDownloadSpeed: \(downloader.currentBitrate)")
default:
break
}


}

func onDownloadErrorEvent(_ downloader: VODownloader!, errorCode error: Int) {
print("onDownloadErrorEvent")

}

}

最佳答案

是的,根据Kamran回答,检查 UI 功能是否在主线程中执行。

还有。

tableView.reloadData()将调用cellForRowAtIndexPath,所以你必须更新 cellForRowAtIndexPath 中的标签文本。

您可以尝试在不调用 reloadData 的情况下执行此操作

 case VODownloaderInfo.infoDownloadProgress.rawValue:
print("infoDownloadProgress")

//Example: Update first cell UI
let indexPath = IndexPath(item: 0, section: 0)
let cell = tableView.cellForRow(at: indexPath) as? DownloadsTableViewCellPhone
tableView.beginUpdates()
cell?.downloadedVideoDownloadProgressLabel.text = "Download duration \(downloader.duration) %"
tableView.endUpdates()

避免不必要地重新加载整个 tableView 内容的另一种方法

tableView.reloadRows(at: [indexPath], with: .none)

但无论如何,更正确的是在 UITableViewDatasource cellForRowAtIndexPath 方法内设置数据

关于swift - 从观察者更新 TableView Cell UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50983166/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com