2017-05-25 1 views
0

J'utilise Single Tap sur Collection View Cell pour appeler performSegue à l'intérieur de collectionView didSelectItemAt. Parfois, lorsque l'application est lancée en premier, performSegue est retardée, je ne sais pas pourquoi et l'utilisateur appuie à nouveau & à nouveau. Dans ce cas, performSegue est appelé plusieurs fois et le nouveau contrôleur de vue est poussé plusieurs fois (nombre de prises). Une raison particulière pour ce retard? Sinon, je vais devoir mettre en œuvre ce qui suit:UICollectionView empêche plusieurs appels/appels à 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)) 
} 

Ou s'il y a une meilleure façon de résoudre ce problème?

Répondre

2

Essayez ci-dessous le code,

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

Is not 'didSelectItemAt' étant déjà appelé le fil conducteur? En outre, cela n'a pas fonctionné pour moi. –