Как я смогу передать изображение, когда данные передаются из одного View Controller в другой? - PullRequest
0 голосов
/ 07 ноября 2019

Как бы я мог показать изображение из HomeViewController в CartViewController

У меня есть настройки кода в моих ячейках, где данные передаются от одного VC к другому,

Я пытаюсьпредставить изображение при передаче данных

Как я могу показать изображение, когда данные передаются из HomeVC в CartVC после нажатия atcBtn

все данные в моемметки проходят нормально, это просто данные изображения, которые не проходят

Я пробовал несколько способов из стека, но я все еще продолжаю получать коды ошибок при представлении изображения в 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 ]

1 голос
/ 07 ноября 2019

Код, который вы разместили, не совсем совпадает:

В 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
}
0 голосов
/ 07 ноября 2019

Похоже, именно в этом проблема

cell.imageUrl.image = cart.imageUrl // не могу понять, как заставить это работать код, так как это Image дляСтроковая проблема

и, как вы заметили, этот код на самом деле не имеет смысла ... Если вы храните URL-адрес (строку) в вашем объекте корзины, то вы не можете его разыграть. к изображению с cell.imageUrl.image, верно?

Вам нужно будет присвоить его 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.

...