1

私はproductItemの構造体の配列によって移入されたUICollectionViewを持って、構造体の青写真は、これが動作し、私は成功し、それを私のUICollectionViewを取り込むことができます UICollectionViewの構造体の配列をDetailViewに渡し、インデックスを使用してある項目から別の項目に移動しますか?

struct ProductoItem { 
    let id: Int 
    let name: String 
    var price: String 
    var picture: String 
    var description: String 
} 

ProductoItem.swift

と呼ばれるそれ自身の迅速なファイルであるかIこの構造体を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 
    } 
} 

です:私たちは、構造体の配列全体を送信しているように私は移入するDetailViewにCollectionViewセルのインデックスに格納された値を渡したい

ファーストそれは製品のセルのデータだけを使用して、私はまた、私の構造体の次の/前のインデックス値に行く次/前の製品に行くための2つのボタンを持っている。これどうやってするの?

+0

detailViewを開くために「didSelectItemAtIndexPath」を使用していますか? –

+0

準備では、yourCollectionView.indexPathForCell(cell)を押したセルのインデックスを取得してから、インデックスを持つ配列からデータを取得できます。この質問をチェックしてください.http://stackoverflow.com/questions/31914213/how-to-make-prepareforsegue-with-uicollectionview – Yan

+0

@RemyCiliaはい私はそうし、構造体を使用する代わりに辞書の配列を使用するとこれを行うことによって現在のインデックスパスを取得します。 let currentProduct = arrayOfDictionaries [indexPath.item]しかし、構造体を使って同じことをしようとすると、空の配列が得られます。 辞書の配列を使用していたときに、そのメソッドを実行する1つのオブジェクトのオブジェクトを取得できましたが、必要なのは構造体全体を持ち、選択したセルのインデックスの値を使用してこのビューでは、次の/前の製品に行くために2つのボタンがありますので、それらをクリックするとインデックスが変わります) –

答えて

1

まず、detailViewに新しい 'currentIndex:Int'属性を作成します。そう

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に、あなたはあなたのアレイと現在のインデックスを持っている、:あなたの最初のUIViewController(UICollectionViewを持っている1)から

、現在のインデックスとあなたのDetailViewに配列を渡しますあなただけ行うことによって、この特定の製品の情報を取得することができます

let currentProduct = self.productos[currentIndex] 

を前または次のいずれかに取得するには、あなただけインクリメントすることができますまたはデクリメント「currentIndex」。

+1

それは完璧に働いた、私は休日にあったので、前に感謝しなかったが、あなたのソリューションは素晴らしかった、ありがとう –

関連する問題