【问题标题】:How would I be able to pass an image when data is passed from one View Controller to another?当数据从一个视图控制器传递到另一个视图控制器时,我如何能够传递图像?
【发布时间】:2023-03-28 08:19:01
【问题描述】:

如何将图像从 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
    }
}

【问题讨论】:

  • 我没有看到您的CartCell 的代码?你有UIImageView吗?假设您已经传递了正确的 Items 并且它有 imageUrl 变量...
  • 尝试在 HomeCell 类中将 imageUrl 数据类型从 UIImage 替换为 UIImageView
  • @Tj3n CartCell 除了标签和图像的 IBOutlets 之外什么都没有,这就是为什么我没有将它添加到我的代码中,如果你愿意,我可以添加它,如果它有帮助,数据通过CartCell 中的标签非常好,它只是我正在努力解决的图像
  • 那么它应该只是cell.itemImageView.sd_setImage(with: URL(string: items.imageUrl))?类似于您的HomeCell 代码,不知道是什么问题
  • 您的HomeCell 中已经有一个configure(withItems:) 方法来在单元格中显示项目。为您的 CartCell 项目复制该方法..

标签: ios swift firebase uitableview sdwebimage


【解决方案1】:

您发布的代码不太匹配:

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

cell.store.text = cart.items.store

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

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

}

并改变`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
}

【讨论】:

    【解决方案2】:

    这似乎是问题所在

    cell.imageUrl.image = cart.imageUrl // 不知道怎么获取 这个代码可以工作,因为它是一个图像到字符串的问题

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

    您需要将其分配给 url

    cell.imageUrl = cart.imageUrl
    

    当然,这只会将 url 传递给单元格。然后,单元格将需要一些智能来从 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 类是什么样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      相关资源
      最近更新 更多