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

라는 그 자체가 빠른 파일에 내가 이제이 구조체를 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 셀의 인덱스에 저장된 값을 전달하려면 그것은 제품 셀의 데이터를 사용하여 다음 구조체의 다음/이전 색인 값으로 이동하는 다음/이전 제품으로 이동하는 두 개의 단추가 있어야합니다. 어떻게해야합니까?

+0

detailView를 여는 데 "didSelectItemAtIndexPath"를 사용합니까? –

+0

준비에서 yourCollectionView.indexPathForCell (cell)을 누른 셀의 인덱스를 가져온 다음 인덱스가있는 배열에서 데이터를 가져올 수 있습니다. 이 질문을 확인하십시오 .http : //stackoverflow.com/questions/31914213/how-to-make-prepareforsegue-with-uicollectionview – Yan

+0

@RemyCilia 예. 그렇습니다. 구조체 대신 사전의 배열을 사용할 수 있습니다. 이 작업을 수행하여 현재 인덱스 경로를 가져옵니다. currentProduct = arrayOfDictionaries [indexPath.item]하지만 구조체를 사용하여 동일한 시도 할 때 빈 배열을 가져옵니다. 어쨌든 사전 배열을 사용하면 해당 메서드를 수행하는 한 제품의 개체를 가져올 수 있지만 전체 구조체를 가져 와서 선택한 셀의 인덱스 값을 사용하여 detailView를 채 웁니다. 이보기에는 다음/이전 제품으로 이동하기 위해 두 개의 단추가 있으므로 인덱스 변경을 클릭 할 때) –

답변

1

먼저 detailView에 'currentIndex : Int'속성을 새로 만듭니다.

첫 번째의 UIViewController합니다 (UICollectionView이있는 것)에서

, 현재의 인덱스와 DetailView에 배열 패스 : 당신의 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 
    } 
} 

를, 그렇게, 배열 및 현재 인덱스가 당신은 수행하여이 특정 제품의 정보를 얻을 수 있습니다

let currentProduct = self.productos[currentIndex] 

이전 또는 다음 하나, 당신은 단지 증가하거나 감소 'currentIndex'을 얻을 수 있습니다.

+1

완벽하게 작동했기 때문에 휴가 중이므로 전에 고마워하지 않았지만 해결책은 훌륭했습니다. 감사합니다. –