如何根据我的代码格式在TableView中加载动态图像?

时间:2016-12-25 03:48:40

标签: ios swift uitableview swift3

我正在学习swift,我终于找到了如何异步加载图像。我现在要做的是将该代码传递给我的TableView,但是考虑到我的代码文件是如何构造的,我有点难以理解。首先是显示单个图像的代码。

login.swift:

let imgURL: NSURL = NSURL(string: "my-url")!
let request:NSURLRequest =  NSURLRequest(url: imgURL as URL)
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)

let task = session.dataTask(with: request as URLRequest, completionHandler: {(data, response, error) in
    DispatchQueue.main.async(execute: { () -> Void in
        self.Profile_Image.image = UIImage(data: data!)
    })
});

task.resume()

上面的代码正确呈现了一个图像现在我想传递该代码并将其插入到TableView中:我有2个文件1用于TableViewCell,另一个用于带有TableView的控制器。

TableViewCell.swift:

class TableViewCell: UITableViewCell {

    @IBOutlet weak var fullname: UIButton!
    @IBOutlet weak var profile_image: UIImageView!


    override func awakeFromNib() {
        super.awakeFromNib()

    }

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

    }

}

Controller.swift:

class Controller: UIViewController,UITableViewDataSource {
    var FullName = [String]()
    var profile_image_string = [String]()
    @IBOutlet weak var TableSource: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

       TableSource.dataSource = self
       getJsonData()
    }

    func getJsonData() {

  URLSession.shared.dataTask(with:request, completionHandler: {(data, response, error) in
            if error != nil {

            } else {
                do {
                    let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]

                    if let Streams = parsedData["JsonData"] as? [AnyObject]  {

                        for Stream in Streams {
                            if let fullname = Stream["fullname"] as? String {
                                self.FullName.append(fullname)
                            }

                            if let profile_picture = Stream["profile_image"] as? String {
                                self.profile_image_string.append(profile_picture)
                            }

                        }

                        DispatchQueue.main.async {
                           self.TableSource.reloadData()

                        }
                    }
                } catch let error as NSError {
                    print(error)
                }
            }

        }).resume()
}



    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TVC", for: indexPath) as! TableViewCell

        cell.fullname.setTitle(FullName[indexPath.row],for: UIControlState.normal)
        cell.profile_image.tag = indexPath.row

        return cell
    }

}

好的,所以在我的控制器类的顶部我有变量 var profile_image_string ,它基本上保存了来自Json的所有不同的URL然后我使用这个代码附加它

  if let profile_picture = Stream["profile_image"] as? String {
                                self.profile_image_string.append(profile_picture)
                            }

现在我只能访问TableView代码中的ImageView属性,如何显示我的图像?如果你能看到TableView(UITableViewCell)里面的代码我通过这样做访问imageView

cell.profile_image. ///

任何建议都会很棒......

1 个答案:

答案 0 :(得分:1)

您可以定义以下cellForRowAt方法:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TVC", for: indexPath) as! TableViewCell

        cell.fullname.setTitle(FullName[indexPath.row],for: UIControlState.normal)
        cell.profile_image.tag = indexPath.row

        /* Set your cell image here*/
           let strCellImageURL = yourArray.objectAtIndex(indexPath.row)

           let imgURL: NSURL = NSURL(string: strCellImageURL)!
           let request:NSURLRequest =  NSURLRequest(url: imgURL as URL)
           let config = URLSessionConfiguration.default
           let session = URLSession(configuration: config)

           let task = session.dataTask(with: request as URLRequest,    completionHandler: {(data, response, error) in
          DispatchQueue.main.async(execute: { () -> Void in
          cell.Profile_Image.image = UIImage(data: data!)
      })
     });

        return cell
    }

我认为如果Native中已经有了好东西,那么我们为什么要选择第三方类。

如果您需要任何澄清,那么您可以在下面发表评论。