2017-06-28 271 views
1

为什么我无法设置图像?为什么我无法设置图像?

class ViewController:UIViewController,UITableViewDelegate,UITalbeViewDataSource{ 
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell",for: indexPath) as! CustomTableViewCell 
    cell.setCell() 
    return cell 
    } 
} 


class CustomTableViewCell:UITableViewCell{ 
    @IBOutlet weak var artworkImage:UIImageView! 

    func setCell(){ 
    let urlStr = "http://is3.mzstatic.com/image/thumb/Music20/v4/d4/6c/af/d46caf98-ff6c-1707-135d-58d6ed9ea6a2/source/500x500bb.jpg" 
    let url = URL(strings: urlStr) 
    let data = try? Data(contentsOf: url!) 

    if let imageData = data { 
     self.artworkImage.image = UIImage(data: imageData) 
    } 
    } 
} 

我想在TableView中显示URL目标的图像,但图像不显示。

enter image description here

这个图像日志。

+0

你是否调用函数“setCell”? –

+0

对不起。我会将其添加到我的问题中。 –

回答

1

setCell()应该是这样的

func setCell(){ 
    let urlStr = "http://is3.mzstatic.com/image/thumb/Music20/v4/d4/6c/af/d46caf98-ff6c-1707-135d-58d6ed9ea6a2/source/500x500bb.jpg" 
    let url = URL(string: urlStr) 
    artworkImage.image = UIImage(named: "ic_placeholder") 

    DispatchQueue.global(qos: .background).async { 
     let data = try? Data(contentsOf: url!) 
     DispatchQueue.main.async { 
      if let imageData = data { 
       self.artworkImage.image = UIImage(data: imageData) 
      } 
     } 
    } 
} 

图片应该在后台线程下载,否则用户界面将被阻止。下载图像后,您需要在主线程中进行更改。

最好还有一个占位符图像。

+1

其他:它更好地缓存图像。 – bhavesh

+0

谢谢!我做到了! –

0

您正尝试在后台线程中设置图像,因为您收到此日志。您需要使用主线程同时ImageView的显示样图像:

if let imageData = data { 
    DispatchQueue.main.async(execute: { 
     self.artworkImage.image = UIImage(data: imageData) 
    }) 
} 
0

试试这个库的图片特别是对细胞的ImageView: -

https://github.com/Haneke/HanekeSwift

让URLString = self.items [indexPath。行]

let URL = NSURL(string:URLString)!

cell.imageView.hnk_setImageFromURL(URL)

-1

细胞:

class CustomTableViewCell: UITableViewCell { 
@IBOutlet weak var artworkImage:UIImageView! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 
func setCell(){ 
    let urlStr = "http://is3.mzstatic.com/image/thumb/Music20/v4/d4/6c/af/d46caf98-ff6c-1707-135d-58d6ed9ea6a2/source/500x500bb.jpg" 
    let url = URL(string: urlStr) 
    let data = try? Data(contentsOf: url!) 
    DispatchQueue.main.async { 
     if let imageData = data { 
      self.artworkImage.image = UIImage(data: imageData) 
     }  } 

} 
override func setSelected(_ selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

} 

也不要忘记。设置App Transport Security Settings。 好运

+0

图片已经在主线下载。不需要再次调用主线程。 – Nitesh

相关问题