当数据从一个视图控制器传递到另一个视图控制器时,我如何能够传递图像?
Posted
技术标签:
【中文标题】当数据从一个视图控制器传递到另一个视图控制器时,我如何能够传递图像?【英文标题】:How would I be able to pass an image when data is passed from one View Controller to another? 【发布时间】:2019-11-07 10:41: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
项目复制该方法..
【参考方案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 类是什么样的。
【讨论】:
以上是关于当数据从一个视图控制器传递到另一个视图控制器时,我如何能够传递图像?的主要内容,如果未能解决你的问题,请参考以下文章
将 ImageData 从一个视图控制器传递到另一个视图控制器
当从一个视图控制器传递到另一个视图时,视图向上移动 x 像素
如何以编程方式将数据从表视图控制器传递到另一个控制器? [复制]