gpt4 book ai didi

ios - 如何在进入 View 时禁用 TableView 单元格图像下载

转载 作者:搜寻专家 更新时间:2023-11-01 06:26:49 25 4
gpt4 key购买 nike

我有一个 TableView,每个单元格内都有 ImageView。我希望图像加载一次并保持那样,但似乎图像在进入用户可见区域时加载(下载,我从外部 API 获取它们)。这似乎是一个延迟加载或类似的东西,我想禁用它,因为如果我向下滚动然后返回,大部分图像都会放错地方。

TableViewController.swift

cell?.mainChampImageView.image = businessLayer.getChampionThumbnailImage(championId: mainChampion.key)

业务层.swift

func getChampionThumbnailImage (championId: Int) -> UIImage {
return dataLayerRiot.getChampionThumbnailImage(championId: championId)
}

DataLayerRiot.swift

func getChampionThumbnailImage (championId: Int) -> UIImage {
var image: UIImage!

let urlString = ApiHelper.getChampionThumbnailImageApiLink(championId: championId)
let url = URL(string: urlString)
let session = URLSession.shared

let semaphore = DispatchSemaphore(value: 0)

session.dataTask(with: url!) {(data, response, error) in
if error != nil {
print("ERROR")
semaphore.signal()
}
else {
image = UIImage(data: data!)!
semaphore.signal()
}
}.resume()

semaphore.wait()
session.finishTasksAndInvalidate()

return image
}

任何人都知道如何在它们进入用户可见区域时禁用它们加载并只是让它们“存储”?

编辑

我正在使用默认方式使单元格出队

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "Match", for: indexPath) as? TableViewCell
...
}

有更好的方法吗?

编辑 2

我还需要说明我无法安装库,因为这是一个大学项目,我只能在大学的 MAC 上工作(因为我没有),因此我无法在没有管理员权限的情况下安装包.

最佳答案

你应该像这样在内存中保存一个任务:

let task = = session.dataTask() {}

然后您可以通过以下方式在任何地方取消它:

task.cancel()

或者,如果对象 session 是一个 URLSession 实例,您可以通过以下方式取消它:

session.invalidateAndCancel()

关于ios - 如何在进入 View 时禁用 TableView 单元格图像下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53226081/

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