繁体   English   中英

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

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

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

我在我的单元格中设置了代码,以便数据从一个 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
    }
}

您发布的代码不太匹配:

例如,在CartViewControllercellForRowAt中,您正在使用CartCell但您的代码正在设置:

cell.store.text = cart.items.store

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

但是,由于您使用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))
    }

}

并改变`细胞

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 // 无法弄清楚如何让这个代码工作,因为它是一个图像到字符串的问题

正如您所指出的,该代码实际上没有意义...如果您在购物车 object 中存储 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 中的 function

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 是什么样的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM