2017-05-24 3 views
-1

私は同様のセルを持つコレクションビューコントローラを持っており、特定のコンテンツを持つ次のviewControllerを各セルに開くようにします。私はセグエでindexpath.row送信しなければならないと思いますが、この部分で、私はエラーに直面:collectionViewCellでsegueを実行するときにindexpathを送信するにはどうすればよいですか?

上記のコードで
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let newViewController = segue.destination as?  myCollectionViewController { 
     newViewController.passedValue = indexPath.row // exactly here 
    } 
} 
+0

'myCollectionView.indexPathsForSelectedItems [0]'? (またはそのようなもの) – Larme

+0

あなたのタスクにこのデリゲート関数didSelectRowAtIndexPathを使用することはできません。 – MageNative

答えて

0

:代わりにsegueを使用しての

は、UICollectionViewDelegateメソッドを使用します。 indexPath.row変数がprepare関数で宣言されていません。選択したセル情報を別のビューコントローラに渡すには、まずクラスにグローバル変数を追加する必要があります。

var selectedCell = 0

次はあなたのクラスの機能didSelectRowAtIndexPathを実装します。この関数は、セルを選択するたびに呼び出されます。この機能では、細胞の情報を取得し、あなたのprepare方法の使用にselectedCell VAR今

override func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) { 
     selectedCell = indexPath.row 
    } 

に、このVaRの値を、それを割り当て、次のコントローラにこのことができます

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "YourIdentifier" { 
      let VC = segue.destination as! YourViewController 
      VC.passed = selectedCell 
     } 
    } 

希望をそれを渡します。

0

newViewController.passedValue = indexPath.row // exactly here 

ここindexPathの値は何ですか? Isはインスタンス変数ですか?あなたのコードで間違ったものがいくつかあります

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
{ 
    //Push your controller here 
} 
+0

indexPath.rowはcollectionViewCellのアドレスです。 – SinaSB

+0

作成したコードはprepare(:sender :)メソッドにあります。ここでは、indexPathという名前のローカル変数はありません。それが私が求めていることです。 Isはインスタンス変数ですか? – PGDev

関連する問題