如何从 URL 在 TableView 中添加图像

Posted

技术标签:

【中文标题】如何从 URL 在 TableView 中添加图像【英文标题】:How do I add am image in a TableView from URL 【发布时间】:2017-06-08 02:08:55 【问题描述】:

我对如何获取作为链接的 DownloadURL 并将其转换为图像并将其添加到我的 tableview 单元格中感到困惑?我的故事板中有一个图像视图,也不知道如何将它连接到表格视图单元格。谢谢!

override func viewDidLoad()  super.viewDidLoad()

    let ref = FIRDatabase.database().reference().child("Posts")

    ref.observeSingleEvent(of: .value, with:  snapshot in

        print(snapshot.childrenCount)

        for rest in snapshot.children.allObjects as! [FIRDataSnapshot] 

            guard let value = rest.value as? Dictionary<String,Any> else  continue 

            guard let  downloadURL = value["DownloadURL"] as? String else  continue 

            let post = postStruct(title: title, date: date, author: author, article: article, downloadURL: downloadURL)

            self.posts.append(post)

        

        self.posts = self.posts.reversed(); self.tableView.reloadData()

    )



override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

    return posts.count


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

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")

    let label1 = cell?.viewWithTag(1) as! UILabel
    label1.text = posts[indexPath.row].title
    return cell!

【问题讨论】:

为你的 cell 定义一个类,并添加一个 UIImageView 作为 outlet,然后在 cellForRowAtIndexpath 中使用像 Alamofire 或 SDWebImage 这样的图像加载器来加载你的图像 如果我的回答有帮助,请标记它(按寒鸦)让其他人知道它是正确的 【参考方案1】:

谷歌这个 cocoapod:SDWebImage

用这个,太棒了

斯威夫特:

import SDWebImage

imageView.sd_setImage(with: URL(string: "url"), placeholderImage: UIImage(named: "placeholder.png"))

关于您的第二个问题连接您的图像视图,您需要创建一个自定义单元格

【讨论】:

再次帮助我***.com/questions/44530922/sdwebimage-doesnt-work【参考方案2】:

1) 您需要使用图像创建自定义单元类,如下所示:

class MyCustomCell: UITableViewCell 
    //...some vars?
    @IBOutlet myImageView: UIImageView!
    //...some vars?

2) 为您设置table view。您可以在 google、SO 等中找到很多关于点 12 的教程。示例:Add custom cells for tableView

3) 安装KingFisher 用于缓存图像。 Kingfisher。它会让你的 tableview 平滑滚动。 (注意:你可以使用任何类似 SDWebImage 的类比)

安装:

1) pod 'Kingfisher', '~&gt; 3.0' 在你的 pod 文件中

2) pod install 在终端中

3) import Kingfisher 在您的 swift 代码文件中

4) 在您的table view 中使用它:

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "myCustomCell", for: indexPath) as! MyCustomCell
    let row = indexPath.row

    // ...other vars?

    let imageURL = URL(string: self.posts[row].downloadURL)
    cell.myImageView.kf.setImage(with: imageURL) // Using kingfisher for caching and viewing. 
     // next time, when you will use image with this URL, it will be taken from cache.

    // ...other vars?

    return cell

希望对你有帮助

【讨论】:

你能再帮我一次吗? ***.com/questions/44530922/sdwebimage-doesnt-work @Riccardo 你可以向金斯利先生寻求帮助:)【参考方案3】:

我认为你从firebase下载图片的方式不对

    firebase storage下载图片地址。你需要在 tableCell 中定义一个 imageView

`

let imagesRef = FIRStorage.storage().reference()
let imageRef = self.imagesRef.child("imageName.jpg")
imageRef.downloadURL  url, error in
    if let error = error 
     else 
        DispatchQueue.main.async 
            cell.imageView.kf.setImage(with: url)
        
    

`

    您的代码有问题,我知道您为什么尝试使用firebase database 下载图像,因为您不能。

【讨论】:

他正在使用 Firebase 数据库下载图像的 URL。不是图片。

以上是关于如何从 URL 在 TableView 中添加图像的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UIImage 从 tableview 单元格中的 url 平滑滚动

从相机单击后在 tableView 单元中添加图像

从 alamofire swift 的 tableview 单元格中的 url 加载图像

将图像和文本添加到 tableview

在 tableview 中显示下载的图像

从服务器获取多个 url 图像并在 iphone 的滚动视图中显示