2017-06-13 45 views
1

我想使用SDImageView Cocoapod與表視圖從數據庫中檢索URL並將其轉換爲可查看的圖像。當我使用下面的代碼時,我無法獲得圖像,我的代碼出了什麼問題?謝謝!如何使用SDImageView在TableViewCell中下載URL?

var posts = [postStruct]() 


override func viewDidLoad() { 
    super.viewDidLoad() 

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

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

     print(snapshot.childrenCount) 

     for rest in snapshot.children.allObjects as! [DataSnapshot] { 

      guard let value = rest.value as? Dictionary<String,Any> else { continue } 
      guard let title = value["Title"] as? String else { continue } 
      guard let downloadURL = value["Download URL"] as? String else { continue } 


      let post = postStruct(title: title, 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 imageView = cell?.viewWithTag(200) as! UIImageView 

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

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

} 

回答

1

您需要更改SDWebimage語法 - >

var posts = [postStruct]() 
var downloadURL : String = "" 

override func viewDidLoad() { 
    super.viewDidLoad() 

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

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

     print(snapshot.childrenCount) 

     for rest in snapshot.children.allObjects as! [DataSnapshot] { 

      guard let value = rest.value as? Dictionary<String,Any> else { continue } 
      guard let title = value["Title"] as? String else { continue } 
       downloadURL = value["Download URL"] as? String ?? "" 


      let post = postStruct(title: title, 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 imageView = cell?.viewWithTag(200) as! UIImageView 

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

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

} 

哪裏downloadURL是URL字符串。

1

您首先需要從陣列中選取postStruct,然後從downloadURL中選取。用這個改變你的override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell方法。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") 
    let imageView = cell?.viewWithTag(200) as! UIImageView 

    let post = self.posts[indexPath.row]; 
    imageView.sd_setImage(with: URL(string: post.downloadURL), placeholderImage: UIImage(named: "placeholder")) 

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