将图像下载到 TableView [Swift]
Download image to TableView [Swift]
我有一个包含以下文件的 swift 项目:
– ViewController.swift
其中主要包含一个 table 视图,其中下载了来自 Firebase 的数据
– ViewControllerTableViewCell.swift
其中包含 tableView
的出口
– DataModel.swift
其中包含 Firebase 数据的模型
在 table 中,我在 imageView 旁边添加了一些标签,其中填充了来自 Firebase 的数据。图像的 URL 在 ViewController.swift
文件中作为 authorAvatarUrl
在其他字符串旁边接收来自 Firebase。完成此过程后,数据将附加到列表 (self.dataList.append(downloadeddata)
) 并重新加载 table:
self.tableViewData.reloadData()
如何下载图像并将其显示在 imageView 中(位于 table 单元格内)?
我试过了
// 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
文件中,这不起作用。
使用像 Kingfisher
这样的库
那么你只需使用:
let url = URL(string: "url_of_your_image")
imageView.kf.setImage(with: url)
如果我理解正确,您的代码可能存在问题,您没有引用当前显示在 TableView
中的 TableViewCell
,而是您在 ViewController
但从未出现过。
您应该将执行网络请求的代码移动到 ViewControllerTableViewCell
class 或 tableView(_:cellForRowAt:)
方法中,并且应该引用给定的单元格。
正如其他人所指出的,有许多库可以帮助您下载图像数据并设置 UIImageView
;因为您已经在使用 Alamofire,所以您可以使用 AlamofireImage.
那么下载图片的最简单方法就是将此代码包含在您的 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
}
其中 allAvatarURLs
包含所有图像' url。
我有一个包含以下文件的 swift 项目:
– ViewController.swift
其中主要包含一个 table 视图,其中下载了来自 Firebase 的数据
– ViewControllerTableViewCell.swift
其中包含 tableView
– DataModel.swift
其中包含 Firebase 数据的模型
在 table 中,我在 imageView 旁边添加了一些标签,其中填充了来自 Firebase 的数据。图像的 URL 在 ViewController.swift
文件中作为 authorAvatarUrl
在其他字符串旁边接收来自 Firebase。完成此过程后,数据将附加到列表 (self.dataList.append(downloadeddata)
) 并重新加载 table:
self.tableViewData.reloadData()
如何下载图像并将其显示在 imageView 中(位于 table 单元格内)?
我试过了
// 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
文件中,这不起作用。
使用像 Kingfisher
这样的库那么你只需使用:
let url = URL(string: "url_of_your_image")
imageView.kf.setImage(with: url)
如果我理解正确,您的代码可能存在问题,您没有引用当前显示在 TableView
中的 TableViewCell
,而是您在 ViewController
但从未出现过。
您应该将执行网络请求的代码移动到 ViewControllerTableViewCell
class 或 tableView(_:cellForRowAt:)
方法中,并且应该引用给定的单元格。
正如其他人所指出的,有许多库可以帮助您下载图像数据并设置 UIImageView
;因为您已经在使用 Alamofire,所以您可以使用 AlamofireImage.
那么下载图片的最简单方法就是将此代码包含在您的 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
}
其中 allAvatarURLs
包含所有图像' url。