2017-05-25 25 views
0

コレクションビューのセルでシングルタップを使用してcollectionView didSelectItemAtの中にperformSegueを呼び出しています。アプリが最初に起動されるときに、特にperformSegueが遅れて、理由とユーザーがもう一度&をタップするとわからないことがあります。この場合、performSegueが複数回呼び出され、新しいビューコントローラが何度も(タップ数)押し込まれます。この遅延の理由は何ですか?そうでない場合、私は次のように実装する必要があります:UICollectionViewは、複数のタップ/ didSelectItemAtの呼び出しを防止します。

var alreadyTapped = false 
override func viewDidAppear(_ animated: Bool) { 
    alreadyTapped = false 
} 
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    if alreadyTapped { return } 
    alreadyTapped = true 
    performSegue(withIdentifier: Constants.Segue.DETAIL_VC, sender: collectionView.cellForItem(at: indexPath)) 
} 

それともこれを解決する良い方法がある場合は?

答えて

2

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     DispatchQueue.main.async { 
      performSegue(withIdentifier: Constants.Segue.DETAIL_VC, sender: collectionView.cellForItem(at: indexPath)) 
     } 
    } 
+0

は、メインスレッド上ですでに呼び出されている 'didSelectItemAt' ではないですか?、コードの下に試してみてくださいまた、それは私のために働かなかった。 –

関連する問題