2016-08-13 13 views
0

UICollectionViewでタップしたセルのindexPathを別のView Controllerに渡そうとしています。私が選択したもののindexPathを取得し、私はこのエラーを取得する次のビューコントローラにCollectionViewCellから別のView ControllerへSegueを渡すIndexPath

それをセグエように見えることはできません:は「PostCellにタイプのポストの値をキャストできませんでした」

ビューコントローラ#1:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let post = posts[indexPath.row] 
    if let cell = collectionView.dequeueReusableCellWithReuseIdentifier("PostCell", forIndexPath: indexPath) as? PostCell { 
      cell.configureCell(post) 
     } 
     return cell 
    } 
} 

    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
     let selectedPost: Post! 
     selectedPost = posts[indexPath.row] 
     performSegueWithIdentifier("PostDetailVC", sender: selectedPost) 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "PostDetailVC" { 

     //Error here: Could not cast value of Post to PostCell 
     if let selectedIndex = self.collection.indexPathForCell(sender as! PostCell){ 
      print(selectedIndex) 
     } 

     if let detailsVC = segue.destinationViewController as? PostDetailVC { 
      if let selectedPost = sender as? Post { 
       print(selectedIndex) 
       detailsVC.post = selectedPost 
       detailsVC.myId = self.myId! 
       detailsVC.indexNum = selectedIndex 
      } 

     } 

    } 
} 

ビューコントローラ#2:

var indexNum: NSIndexPath! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    print(indexNum) 
} 

答えて

3

私はインデックスパス

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    performSegueWithIdentifier("PostDetailVC", sender: indexPath) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "PostDetailVC" { 
     guard let selectedIndexPath = sender as? NSIndexPath, 
       detailsVC = segue.destinationViewController as? PostDetailVC else { return } 
     print(selectedIndexPath) 

     let selectedPost = posts[selectedIndexPath.row] 
     detailsVC.post = selectedPost 
     detailsVC.myId = self.myId! 
     detailsVC.indexNum = selectedIndexPath 
    } 
} 
+0

非常に素晴らしいを渡すことをお勧めします!私は間違いなく今理解しています。どうもありがとうございました! – kelsheikh

0

これは、タイプがPostの引数を与えており、それをPostCellとしてキャストしようとしているからです。どちらが動作しません。

1

Postを渡していますが、PostCellsenderではありません。 CollectionViewは選択されたアイテムを追跡しているので、これは必要ありません。

これを試してください:あなたが期待PostCellインスタンスと一致しないPostインスタンスを渡している

if let selectedIndex = self.collection.indexPathsForSelectedItems()?.first { 
    print(selectedIndex) 
} 
関連する問題