当数据从一个视图控制器传递到另一个视图控制器时,我如何能够传递图像?

How would I be able to pass an image when data is passed from one View Controller to another?

我如何才能将图像从 HomeViewController 显示到 CartViewController

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

我试图在数据传递时呈现图像

在按下 atcBtn

后,当数据从首页VC 传递到购物车VC 时,我将如何显示图像

我标签中的所有数据都通过了,只有图像数据没有通过

我已经从堆栈中尝试了几种方法,但在购物车中显示图像时仍然收到错误代码VC

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
    }
}

您发布的代码不完全匹配:

cellForRowAt in CartViewController 中,例如,您正在使用 CartCell 但您的代码设置为:

cell.store.text = cart.items.store

但是您发布的CartCell中没有store标签/属性。

但是,由于您对 HomeCell class 做的事情非常相似,所以只需对 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))
    }

}

并更改`cell

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

    cell.configure(withItem: cart)

    return cell
}

这似乎是问题所在

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

正如您所指出的,该代码并没有真正意义...如果您在购物车对象中存储 url(字符串),那么您不能将其转换为图片 cell.imageUrl.image,对吧?

您需要将其分配给 url

cell.imageUrl = cart.imageUrl

当然,这只会将 url 传递给单元格。然后,该单元需要一些智能才能从 url.

中获取相关图像

CartCell 的一些伪代码class...

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

cell.setImageUrlAndDisplayImage( cart.imageUrl )

然后是CartCell中的函数class

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 class 或 CartCell class 长什么样。