web-dev-qa-db-ja.com

indexPathsForSelectedItemsを使用してコレクションビューで選択したアイテムを取得する方法

写真の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

    }
} 
17
jmcastel

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
    }
} 
34
rdelmar

indexPathsForSelectedItemsはindexPathの配列を返します(複数のアイテムが選択されている可能性があるため)。使用する必要があります。

let indexPaths : NSArray = self.collectionView!.indexPathsForSelectedItems()
let indexPath : NSIndexPath = indexPaths[0] as NSIndexPath

(おそらく、いくつかの項目が選択されているかどうかをテストして、それに応じて処理する必要があります)。

16
pbasdf

In Swift= 3:

let index = self.collectionView.indexPathsForSelectedItems?.first

4
tuandapen

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
        }
    }
}
2
fs_tigre