我有一个包含以下文件的快速项目:
– 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
文件中,但是此操作无效。
答案 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
}
包含所有图像的网址。