将图像下载到TableView [快速]

时间:2018-10-13 12:26:32

标签: ios swift image firebase imagedownload

我有一个包含以下文件的快速项目:

ViewController.swift ,其中大多数包含tableView并从Firebase中下载数据

ViewControllerTableViewCell.swift ,其中包含tableView的出口

DataModel.swift ,其中包含Firebase数据的模型

在表格中,我在imageView旁边添加了一些标签,这些标签中填充了Firebase的数据。图像的URL在 ViewController.swift 文件中以 authorAvatarUrl 的形式在Firebase的其他字符串旁边接收。完成此过程后,数据将添加到列表( self.dataList.append(downloadeddata) )并重新加载表:

self.tableViewData.reloadData()

如何下​​载图像并将其显示在表单元内部的imageView中?

我尝试过

// Declare variable
var cellViewController = ViewControllerTableViewCell()

[...]

// Download author's avatar
let avatarURL = URL(string: authorAvatarUrl as! String)
                Alamofire.request(avatarURL!).responseData { (response) in

                    if response.error == nil {

                        if let data = response.data {

                            self.cellViewController.profileImageView.image = UIImage(data: data)

                        }

                    }

                }

位于 ViewController.swift 文件中,但是此操作无效。

2 个答案:

答案 0 :(得分:1)

使用类似Kingfisher

的库

然后您只需使用:

let url = URL(string: "url_of_your_image")
imageView.kf.setImage(with: url)

答案 1 :(得分:1)

如果我正确理解,则您的代码可能存在以下问题:您未引用TableViewCell中当前显示的TableView,而是引用了{{1 }},但从未出现。

您应该在ViewController类或ViewControllerTableViewCell方法中移动代码以执行网络请求,并应引用给定的单元格。

正如其他人指出的那样,有许多库可以帮助您下​​载图像数据并设置tableView(_:cellForRowAt:);由于您已经在使用Alamofire,因此可以使用AlamofireImage

然后,下载图像的最简单方法是将此代码包含在UIImageView

ViewController

var allAvatarURLs: [URL] = // the array containing all the avatars' url func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let row = indexPath.row let url = allAvatarURLs[row] let cell = tableView.dequeueReusableCell(withIdentifier: "<yourIdentifier>", for: indexPath) as! ViewControllerTableViewCell cell.profileImageView.image.af_setImage(withURL: url) // UIImageView extension in AlamofireImage return cell } 包含所有图像的网址。