从单元格到新视图控制器的图像传输主要加载错误的图像有没有办法解决这个问题?
Image transfer from cell to new view controller load wrong images mostly is there any way to fix this problem?
周末愉快。我对从单元格到新视图控制器的图像传输有疑问。我是 swift 的新手,我认为这个问题可以很容易地解决,但实际上我找不到我尝试过的协议等,但它无法解决我的问题。我有一些带有一些图像的单元格,每个单元格都有不同的图像,导航视图控制器应该显示与单元格图像完全相同的图像。在这一点上,我从单元格中获取图像并为该图像提供一个变量名称并调用视图控制器并从图像视图中添加等于此图像但它工作错误。在这里我的代码你会清楚地理解。对不起我的英语。
这里是来自单元格的代码:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! itemsCell
let dataGelen = itemler[indexPath.row]
cell.titleLabel.text = dataGelen.itemTitleLabel
if let cellDataImage = dataGelen.itemImageName {
let url = URL(string: cellDataImage)
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil {
print(error!)
return
}
DispatchQueue.main.async {
cell.itemsimageView.image = UIImage(data: data!)
self.imageDeneme = UIImage(data: data!)!
}
}.resume()
}
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let homecon = HomeController(collectionViewLayout: UICollectionViewLayout())
homecon.name = datagelen.itemTitleLabel!
homecon.imageDenemeHome = imageDeneme
homecon.showDetailPage()
}
和来自视图控制器的代码:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.itemDetailImage.image = imageDetail
}
有什么方法可以拍这张照片吗?我没有使用故事板。我只使用代码。谢谢..
imageDeneme
包含在最近调用 cellForItemAt
中分配的图像。您需要将图像添加到缓存图像的数据模型中。
将此 属性 添加到由 dataGelen
表示的 class
var image : UIImage?
并删除控制器中的imageDeneme
。
然后在 cellForItemAt
中检查名称 和 模型中的图像是否存在,只有当检查结果为假时才加载它
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! itemsCell
let dataGelen = itemler[indexPath.item]
cell.titleLabel.text = dataGelen.itemTitleLabel
if let image = dataGelen.image {
cell.itemsimageView.image = image
} else if let cellDataImage = dataGelen.itemImageName {
let url = URL(string: cellDataImage)
URLSession.shared.dataTask(with: url!) { (data, _, error) in
if let error = error { print(error); return }
DispatchQueue.main.async {
let image = UIImage(data: data!)
cell.itemsimageView.image = image
self.dataGelen.image = image
}
}.resume()
}
return cell
}
在didSelectItemAt
中从模型
获取图像
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let homecon = HomeController(collectionViewLayout: UICollectionViewLayout())
let dataGelen = itemler[indexPath.item]
homecon.name = dataGelen.itemTitleLabel!
homecon.imageDenemeHome = dataGelen.image
homecon.showDetailPage()
}
周末愉快。我对从单元格到新视图控制器的图像传输有疑问。我是 swift 的新手,我认为这个问题可以很容易地解决,但实际上我找不到我尝试过的协议等,但它无法解决我的问题。我有一些带有一些图像的单元格,每个单元格都有不同的图像,导航视图控制器应该显示与单元格图像完全相同的图像。在这一点上,我从单元格中获取图像并为该图像提供一个变量名称并调用视图控制器并从图像视图中添加等于此图像但它工作错误。在这里我的代码你会清楚地理解。对不起我的英语。
这里是来自单元格的代码:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! itemsCell
let dataGelen = itemler[indexPath.row]
cell.titleLabel.text = dataGelen.itemTitleLabel
if let cellDataImage = dataGelen.itemImageName {
let url = URL(string: cellDataImage)
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil {
print(error!)
return
}
DispatchQueue.main.async {
cell.itemsimageView.image = UIImage(data: data!)
self.imageDeneme = UIImage(data: data!)!
}
}.resume()
}
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let homecon = HomeController(collectionViewLayout: UICollectionViewLayout())
homecon.name = datagelen.itemTitleLabel!
homecon.imageDenemeHome = imageDeneme
homecon.showDetailPage()
}
和来自视图控制器的代码:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.itemDetailImage.image = imageDetail
}
有什么方法可以拍这张照片吗?我没有使用故事板。我只使用代码。谢谢..
imageDeneme
包含在最近调用 cellForItemAt
中分配的图像。您需要将图像添加到缓存图像的数据模型中。
将此 属性 添加到由 dataGelen
var image : UIImage?
并删除控制器中的imageDeneme
。
然后在 cellForItemAt
中检查名称 和 模型中的图像是否存在,只有当检查结果为假时才加载它
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! itemsCell
let dataGelen = itemler[indexPath.item]
cell.titleLabel.text = dataGelen.itemTitleLabel
if let image = dataGelen.image {
cell.itemsimageView.image = image
} else if let cellDataImage = dataGelen.itemImageName {
let url = URL(string: cellDataImage)
URLSession.shared.dataTask(with: url!) { (data, _, error) in
if let error = error { print(error); return }
DispatchQueue.main.async {
let image = UIImage(data: data!)
cell.itemsimageView.image = image
self.dataGelen.image = image
}
}.resume()
}
return cell
}
在didSelectItemAt
中从模型
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let homecon = HomeController(collectionViewLayout: UICollectionViewLayout())
let dataGelen = itemler[indexPath.item]
homecon.name = dataGelen.itemTitleLabel!
homecon.imageDenemeHome = dataGelen.image
homecon.showDetailPage()
}