写真のcollectionViewがあり、detailViewControlerに好かれた写真を渡したいです。
収集データは以下から取得されます。
var timeLineData:NSMutableArray = NSMutableArray ()
セグエの準備メソッドを使用したいと思います。
私の問題は、クリックされたセルから良いindexPathを取得する方法ですか?
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
}
}
PrepareForSegue:sender:の送信者引数は、セルからセグエを接続した場合のセルになります。その場合、セルからindexPathを取得できます。
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
}
}
indexPathsForSelectedItems
はindexPathの配列を返します(複数のアイテムが選択されている可能性があるため)。使用する必要があります。
let indexPaths : NSArray = self.collectionView!.indexPathsForSelectedItems()
let indexPath : NSIndexPath = indexPaths[0] as NSIndexPath
(おそらく、いくつかの項目が選択されているかどうかをテストして、それに応じて処理する必要があります)。
In Swift= 3:
let index = self.collectionView.indexPathsForSelectedItems?.first
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
}
}
}