Swift 3将图像从URL添加到UIImageView

时间:2017-09-02 21:31:15

标签: ios swift uiimageview uicollectionview

我尝试将网址中的图片添加到UIImageView。我没有错误,但屏幕上没有显示任何错误。

我在这里做错了什么?

我对来自.xcassets的图片使用了相同的方法,但它工作正常,但它无法通过远程网址工作。

以下是我的文件:

RelatedCollectionViewCell.swift

class RelatedCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var related: UIImageView!

}

ViewController.swift

var images = [AnyObject]()

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return images.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    do {
        try images.append(UIImage(data:  Data(contentsOf: URL(string:"https://i.ytimg.com/vi/kWxHV9jkwSA/hqdefault.jpg")!))!)
    } catch {
        print(error)
    }

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "RelatedCollectionViewCell", for: indexPath) as! RelatedCollectionViewCell

    cell.related.image = images[indexPath.row] as? UIImage

    return cell
}

2 个答案:

答案 0 :(得分:0)

这不起作用,因为在执行collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int)时,images数组中的项目为零。 (因为你从一个至少需要一点时间的URL加载它们。)

因此,在完成下载图像后,必须通过添加以下内容重新加载:

collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    ....
    self.reloadData()
}

如果你在正手上知道这个数量,你当然可以在一个部分给它一定数量的物品:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
   return 5//whatever amount
}

当然,如果没有互联网连接,最好异步加载图像以阻止它冻结您的应用程序,但这不是问题的一部分。

答案 1 :(得分:0)

这是因为首次加载时你的数组images.count = 0

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell

因为Images数组为空

如果您的商品数量为0,则您的应用不会输入db.execute("INSERT INTO chapters (chapter, book_id) VALUES (?, ?)", [request.form['chapter']], book_id)