当数据从一个View Controller传递到另一个View Controller时,如何传递图像?

时间:2019-11-07 10:41:01

标签: ios swift firebase uitableview sdwebimage

如何显示从HomeViewController到CartViewController的图像

我在单元格中设置了代码,数据从一个VC传递到另一个VC,

我正在尝试在传递数据时显示图像

按下atcBtn后将数据从HomeVC传递到CartVC时,如何显示图像

我标签中的所有数据都能顺利通过,只是图像数据无法通过

我从堆栈上尝试了几种方法,但在将图像显示在CartVC中时仍然出现错误代码

class CartViewController: UIViewController {

    var items: Items!
    @IBOutlet weak var cartTableView: UITableView!

     override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        cartTableView.dataSource = self
        cartTableView.delegate = self
    }

}

extension CartViewController: UITableViewDataSource, UITableViewDelegate {

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return Cart.currentCart.cartItems.count
    }

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

        let cart = Cart.currentCart.CartItems[indexPath.row]

        cell.store.text = cart.items.store
        cell.lblMealName.text = (cart.items.name)
        cell.lblSubTotal.text = "$\(cart.items.cost)"

        cell.imageUrl.image = cart.imageUrl   // can't figure out how to get this to code to work since it is an Image to String issue

        return cell

class CartCell: UITableViewCell {

    @IBOutlet weak var lblMealName: UILabel!
    @IBOutlet weak var imageUrl: UIImageView!
    @IBOutlet weak var lblSubTotal: UILabel!
    @IBOutlet weak var lblWeight: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
}

2 个答案:

答案 0 :(得分:1)

您发布的代码不太匹配:

例如,在cellForRowAt的{​​{1}}中,您正在使用CartViewController,但是您的代码正在设置:

CartCell

但是您发布的cell.store.text = cart.items.store 中没有store标签/媒体资源。

但是,由于您对CartCell类所做的事情非常相似,因此对HomeCell采取相同的方法。

遵循以下原则:

CartCell

并更改“单元格”

class CartCell: UITableViewCell {

    @IBOutlet weak var lblMealName: UILabel!
    @IBOutlet weak var imageUrl: UIImageView!
    @IBOutlet weak var lblSubTotal: UILabel!
    @IBOutlet weak var lblWeight: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    func configure(withItems items: Items) {
        //store.text = cart.items.store
        lblMealName.text = (items.name)
        lblSubTotal.text = "$\(items.cost)"
        imageUrl.sd_setImage(with: URL(string: items.imageUrl))
    }

}

答案 1 :(得分:0)

这似乎是问题所在

  

cell.imageUrl.image = cart.imageUrl //无法弄清楚如何获取   该代码可以正常工作,因为它是图像到字符串的问题

并且正如您所指出的,该代码实际上没有任何意义……如果您在购物车对象中存储url(字符串),则无法使用cell.imageUrl将其转换为图像。图片,对吧?

您需要将其分配给网址

cell.imageUrl = cart.imageUrl

当然,这只是将URL传递到单元格。然后,该单元将需要一些智能才能从网址中获取相关的图像。

您的CartCell类的一些伪代码...

cell.store.text = cart.items.store
cell.lblMealName.text = (cart.items.name)
cell.lblSubTotal.text = "$\(cart.items.cost)"

cell.setImageUrlAndDisplayImage( cart.imageUrl )

然后是CartCell类中的函数

func setImageUrlAndDisplayImage( imageUrl: URL) {
    self.setImage(with: URL(string: imageUrl))
}

或者,当然,您可以直接将图像直接分配给CartCell图像属性(如果有)。

cell.store.text = cart.items.store
cell.lblMealName.text = (cart.items.name)
cell.lblSubTotal.text = "$\(cart.items.cost)"

cell.the_image = UIImage(with: URL(string: cart.imageUrl))

以上只是伪代码,因为我们不知道您的Cart类或CartCell类是什么样。