2017-10-18 27 views
1

J'ai un UICollectionView avec 4 cellules personnalisées. les cellules 0 et 3 sont de conception identique. Cependant, le cas du code est presque identique aux fonctions et aux objets. Les deux ont 3 identiques UIButtons, disons un ensemble est pour le joueur 1 et l'autre pour le joueur 2. Je ne veux pas copier le code et l'avoir dupliqué à partir des boutons dans la cellule 0. Quel est le meilleur (je sais que c'est subjectif) avoir tous les boutons en utilisant la même base de code? J'ai pensé à placer une étiquette sur le bouton afin que je sache quel bouton appelle.Deux codes de partage UIButtons

Ou est-ce un travail pour les génériques?

@IBAction func undo(_ sender: UIButton) { 

    undo(sender: sender) 

} 

func undo(sender: sender) { 

    if sender.tag = 0 { 

      // Do something that is different for button 0 

    } else if sender.tag = 1 { 

     // Do something that is different for button 1 

    } 

    //Common to all buttons... 

} 
+0

Si votre code n'utilise que des données différentes, vous pouvez créer une fonction qui reçoit les * données *. Ensuite, vos gestionnaires de boutons appellent simplement cette fonction avec les données à utiliser. – theGleep

+1

Certainement pas génériques. L'utilisation de tags est une mauvaise pratique. De votre exemple n'est pas très clair ce qui est commun. – Sulthan

Répondre

1

Il est un peu difficile de comprendre ce que vous essayez de faire, mais il semble que vous voudrez peut-être est injecter une fermeture dans votre cellule (ou idéalement une sorte de modèle de vue pour la cellule) qui a le comportement que vous voulez exécuter déjà défini, et appelez-le lorsque la cellule est tapée.