ios - source - uicollectionview swift 4
Cómo obtener un elemento seleccionado en vista de colección usando indexPathsForSelectedItems (4)
indexPathsForSelectedItems
devuelve una matriz de indexPaths (ya que puede haber varios elementos seleccionados) por lo que debe usar:
let indexPaths : NSArray = self.collectionView!.indexPathsForSelectedItems()
let indexPath : NSIndexPath = indexPaths[0] as NSIndexPath
(Probablemente debería probar para ver si se seleccionan varios elementos y manipularlos en consecuencia).
Tengo una collectionView de fotos y quiero pasar la foto que fue cliqueada a un detailViewControler.
Los datos de la colección provienen de:
var timeLineData:NSMutableArray = NSMutableArray ()
Me gustaría utilizar el método de preparación para segue.
Mi problema es cómo obtener el buen indexPath de la celda a la que se hizo clic.
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue == "goToZoom" {
let zoomVC : PhotoZoomViewController = segue.destinationViewController as PhotoZoomViewController
let cell = sender as UserPostsCell
let indexPath = self.collectionView!.indexPathForCell(cell)
let userPost = self.timeLineData.objectAtIndex(indexPath!.row) as PFObject
zoomVC.post = userPost
}
}
El argumento del remitente en prepareForSegue: remitente: será la celda si conectó la segue de la celda. En ese caso, puede obtener indexPath de la celda,
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showZoomController" {
let zoomVC = segue.destinationViewController as PhotoZoomViewController
let cell = sender as UICollectionViewCell
let indexPath = self.collectionView!.indexPathForCell(cell)
let userPost = self.timeLineData.objectAtIndex(indexPath.row) as PFObject
zoomVC.post = userPost
}
}
Swift 3.0
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == “segueID”{
if let destination = segue.destination as? YourDestinationViewController{
let cell = sender as! UICollectionViewCell
let indexPath = myCollectionView.indexPath(for: cell)
let selectedData = myArray[(indexPath?.row)!]
// postedData is the variable that will be sent, make sure to declare it in YourDestinationViewController
destination.postedData = selectedData
}
}
}
En veloz 3:
let index = self.collectionView.indexPathsForSelectedItems?.first