2017-07-19 5 views
1

UICollectionViewに画像の配列が設定されています。ユーザーが画像をタップして新しいUIViewControllerでプレビューすることを許可します。UICollectionView didSelectIotemAt issue

何らかの理由により、didSelectItemAtメソッドが期待どおりに機能していません。それはエラーを投げるわけではなく、呼び出され、何も起こりません。私がここで何が間違っているか分からない。

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    print("did select item at was called") 
    let dashboardStoryboard = UIStoryboard(name: STORYBOARD_DASHBOARD, bundle:nil) 
    let destinationVC = dashboardStoryboard.instantiateViewController(withIdentifier: "PreviewPostImageVC") as! PreviewPostImageVC 
    destinationVC.selectedImage = arrayOfSelectedImages[indexPath.row] 
    self.navigationController?.pushViewController(destinationVC, animated: true) 
} 
+0

self.navigationController 'nil'ですか? –

答えて

2

私は問題のアレンのコメントを指摘しています。メソッドが呼び出されていることが分かっている場合(printステートメントはコンソールに表示されます)、最も可能性の高い問題はself.navigationControllerがnilであることです。オプションの連鎖を使用している場合、その呼び出しは無名であれば自動的に失敗します。これはあなたが望むものであってもなくてもかまいません。これを次のように変更してみてください:

guard let navController = self.navigationController else { 
    print("Navigation Controller is nil!") 
    return 
} 
navController.pushViewController(destinationVC, animated: true) 
+0

あなたはそうです。それはゼロです。 'PreviewPostImageVC'は 'UINavigationController'に埋め込まれていません。それは埋め込まれる必要がありますか? – Dani

+1

ナビゲーションコントローラにプッシュするには、コレクションビューをナビゲーションコントローラに配置する必要があります。代わりに、 'self.present(_:animated:completion:)'だけでモーダルプレゼンテーションを行うこともできます。 –

+1

アレンが答えました。はい、プッシュを行うにはナビゲーションコントローラに埋め込まなければなりません。ナビゲーションコントローラを使用していない場合は、モーダルプレゼンテーションを使用することをお勧めします。 –