Swift 将结构数组从UICollectionView传递到DetailView,并使用索引从一个项转到另一个项?
我有一个UICollectionView,它由productItem结构数组填充,结构蓝图位于它自己的名为ProductoItem.swift的swift文件中Swift 将结构数组从UICollectionView传递到DetailView,并使用索引从一个项转到另一个项?,swift,struct,uicollectionview,uicollectionviewcell,detailview,Swift,Struct,Uicollectionview,Uicollectionviewcell,Detailview,我有一个UICollectionView,它由productItem结构数组填充,结构蓝图位于它自己的名为ProductoItem.swift的swift文件中 struct ProductoItem { let id: Int let name: String var price: String var picture: String var description: String } 这是可行的,我可以用它成功地填充UICollectionView,
struct ProductoItem {
let id: Int
let name: String
var price: String
var picture: String
var description: String
}
这是可行的,我可以用它成功地填充UICollectionView,我现在要做的是将此结构传递给detailView,以便在detailView中创建此变量
var productos = [ProductoItem]()
我在prepareForSegue方法中添加了以下代码
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "detalleProducto" {
let controller = segue.destination as! ProductoDetailViewController
controller.productos = productos
}
}
我不知道如何知道的是:
首先,当我们发送整个结构数组时,我想将存储在CollectionView单元格索引上的值传递给DetailView,以便仅使用产品单元格的数据填充它,然后我还想使用两个按钮转到下一个/上一个产品,只转到我的结构的下一个/上一个索引值。如何执行此操作?首先,在detailView中创建一个新的“currentIndex:Int”属性
var productos = [ProductoItem]()
从第一个UIViewController(具有UICollectionView的控制器)将当前索引和数组传递给DetailView:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "detalleProducto" {
let controller = segue.destination as! ProductoDetailViewController
controller.productos = productos
// do whatever you need to get your index
controller.currentIndex = self.collectionView.indexPathsForSelectedItems()[0].row
}
}
然后在DetailView中,您有您的数组和当前索引,因此您可以通过执行以下操作来获取此特定产品的信息:
let currentProduct = self.productos[currentIndex]
要访问上一个或下一个,您只需增加或减少“currentIndex”。是否使用“didSelectItemAtIndexPath”打开详细视图?在“准备”中,您可以获取按下CollectionView.indexPathForCell(单元格)的单元格的索引,然后使用索引从数组中获取数据。检查这个问题。@RemyCilia是的,我会,如果我不使用结构,而是使用字典数组,我可以通过这样做来获取当前的indexpath。让currentProduct=arrayOfDictionaries[indexPath.item],但当我使用该结构尝试相同操作时,我得到一个空数组。无论如何,当我使用字典数组时,我可以通过该方法获得一个产品的对象,但我需要的是带上整个结构,使用所选单元格索引中的值来填充detailView,在这个视图中,我有两个按钮可以转到下一个/上一个产品,因此当您单击它们时,索引会发生变化)@Yan我可以通过在prepare(对于segue:)中执行此操作来获取按下的单元格的索引方法:让item=self.collectionView.indexPathsForSelectedItems,但我需要将该indexPath与我的结构数组一起使用,这样当我转到详细视图时,为填充数据而选择的结构就是所选的结构。一旦到了那里,我需要能够转到下一个或上一个索引值,这样我就可以切换到下一个/上一个产品。它工作得很好,我以前没有感谢你,因为我在度假,但你的解决方案很棒,谢谢