使用URL在cell.imageView.image中显示图像

时间:2017-11-15 08:37:13

标签: ios swift alamofire

我正在尝试在处理后显示图像。 这是我的代码。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "foodList", for: indexPath)
        let dict = itemsArray?[indexPath.row]


        cell.textLabel?.text = dict?["food_name"] as? String
        var URLz = dict?["image_url"] as! String
        Alamofire.request(URLz).response{ response in
            if let data = response.data{
                let image = UIImage(data:data)
                cell.imageView?.image = image
            }else{
                print("Data is nil.")
            }
        }





        return cell;
    }

当我做以下事情时;没有显示任何内容但表格行。

1 个答案:

答案 0 :(得分:1)

在tableviewcell中下载并显示图像不是trivial,您需要在将图像分配给imageview之前检查单元格是否可见。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "foodList", for: indexPath)
            .............
            cell.imageView?.image = UIImage(named: "placeholder.png") //or nil
            if let dict = dict, imageURL = dict["image_url"] as? String {
                Alamofire.request(imageURL).response { response in
                    if let data = response.data, let image = UIImage(data: data) {
                        DispatchQueue.main.async {
                            if let cell = tableView.cellForRow(at: indexPath) {
                                 cell.imageView?.image = image
                            }
                        }
                    } else {
                        print("Data is nil.")
                    }
                }
            }
            return cell
    }

更好的选择是使用第三方库,如Kingfisher,它使用UIImageView扩展来从网络下载和缓存图像。它就像下面那样简单

let url = URL(string: imageURL)!
cell.imageView.kf.setImage(with: url, placeholder: nil)