首页 文章

从firebase存储中检索图像以在tableView单元格上显示

提问于
浏览
0

我只需要帮助我用firebase构建Instagram-clone并且我有一个问题,白色帖子后我无法从firebase存储中检索图像以显示在tableView单元格,你能帮助我,请:(

导入UIKit

导入FirebaseAuth

导入FirebaseDatabase

class HomeViewController:UIViewController,UITableViewDelegate {

@IBOutlet weak var tableview: UITableView!
var posts = [Post]()
override func viewDidLoad() {
    super.viewDidLoad()

    tableview.dataSource = self
    loadposts()

 //   var post = Post(captiontxt: "test", photoUrlString: "urll")
 //   print(post.caption)
 //   print(post.photoUrl)

}

func loadposts() {
    Database.database().reference().child("posts").observe(.childAdded){ (snapshot: DataSnapshot)in
        print(Thread.isMainThread)
          if let dict = snapshot.value  as? [String: Any]{
            let captiontxt = dict["caption"] as! String
            let photoUrlString = dict["photoUrl"] as! String
           let post = Post(captiontxt: captiontxt, photoUrlString: photoUrlString )
            self.posts.append(post)
            print(self.posts)
            self.tableview.reloadData()
        }
    }
}

@IBAction func logout(_ sender: Any) {
    do {
        try Auth.auth().signOut()
    }catch let logoutErrorr{
        print(logoutErrorr)
    }
    let storyboard = UIStoryboard(name: "Start", bundle: nil)
    let signinVC = storyboard.instantiateViewController(withIdentifier: "SigninViewController")
    self.present(signinVC, animated: true, completion: nil)


}

扩展HomeViewController:UITableViewDataSource {func tableView(_ tableView:UITableView,numberOfRowsInSection section:Int) - > Int {return posts.count

}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableview.dequeueReusableCell(withIdentifier: "imagecell", for: indexPath) as! PostCellTableViewCell
   cell.captionLabel.text = posts[indexPath.row].caption
    cell.postimage.image =  posts[indexPath.row].photoUrl
   // print(cell.captionLabel.text)
   // print(cell.daysLabel.text)


    return cell
}

}

enter code here

import Foundation类Post {var caption:String var photoUrl:String

init(captiontxt: String, photoUrlString: String) {
    caption = captiontxt
    photoUrl = photoUrlString

}

}

1 回答

  • 1
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableview.dequeueReusableCell(withIdentifier: "imagecell", for: indexPath) as! PostCellTableViewCell
    
        cell.postimage.image = nil
    
        cell.tag += 1
        let tag = cell.tag
    
        cell.captionLabel.text = posts[indexPath.row].caption
    
        let photoUrl = posts[indexPath.row].photoUrl
    
        getImage(url: photoUrl) { photo in
            if photo != nil {
                if cell.tag == tag {
                    DispatchQueue.main.async {
                        cell.postimage.image = photo
                    }
                }
            }
        }
    
        return cell
    }
    
    func getImage(url: String, completion: @escaping (UIImage?) -> ()) {
        URLSession.shared.dataTask(with: URL(string: url)!) { data, response, error in
            if error == nil {
                completion(UIImage(data: data!))
            } else {
                completion(nil)
            }
        }.resume()
    }
    

相关问题