J'ai un TableView dans lequel toutes les données sont affichées et chaque cellule peut contenir 1 ou 2 boutons. J'ai lu beaucoup de sujets et je comprends comment ajouter une cible pour chaque bouton via mon ViewController. Puisque ces boutons seront transmis au même VC et afficheront des images, j'ai le code suivant. Dans ma sous-classe TableViewCell J'ai 2 boutonsLa transmission des données dépend du bouton de la cellule tableView
class CODetailsTicketCell: UITableViewCel {
var onButtonTapped: (() -> Void)? = nil
@IBAction func firstBtnTapped(_ sender: UIButton) {
if let onButtonTapped = self.onButtonTapped {
onButtonTapped()
}
print("First button was pressed")
}
@IBAction func secondBtnTapped(_ sender: UIButton) {
if let onButtonTapped = self.onButtonTapped {
onButtonTapped()
}
print("Second button was pressed")
}
}
Dans mon ViewController dans cellForRowAt indexPath Je le code suivant
let message = messages[indexPath.row]
if let cell = tableView.dequeueReusableCell(withIdentifier: "COTicketsCell", for: indexPath) as? CODetailsTicketCell {
cell.configureCell(openTickets: message)
cell.onButtonTapped = {
self.performSegue(withIdentifier: "toImageVC", sender: message)
}
return cell
Afin de transmettre les données par Segue-je utiliser le code suivant dans prepareForSegue
Tout fonctionne en mode FINE mais je ne peux pas vérifier la balise button dans prepareForSegue. Fondamentalement, actuellement les deux boutons envoient les mêmes données
targetController.loadImageURL = URL(string: data.firstImageUrl)
Comment puis-je transmettre des données en fonction du bouton enfoncé? J'ai essayé de faire quelque chose comme ça, mais il semble que ce soit faux et ne fonctionne pas.
let button = sender as? UIButton
if let data = sender as? OpenTicketsData {
if button?.tag == 1 {
targetController.loadImageURL = URL(string: data.firstImageUrl)
} else if button?.tag == 2 {
targetController.loadImageURL = URL(string: data.secondImageUrl)
}
}
Merci beaucoup pour votre réponse rapide, mais pourriez-vous expliquer plus en détail comment cela va résoudre le problème? Je n'ai pas encore vérifié mais je ne veux pas simplement copier et coller le code. – Sargot
Comme vous avez déjà défini 'tag' sur vos 2 boutons et que vous utilisez le même événement pour eux, dans' onButtonTapped' vous devez passer le bouton (expéditeur) en argument. Ce faisant, lorsque vous affectez une fonction réelle dans le contrôleur de vue, vous savez quel bouton a été tapé. – Lawliet
Oui, je comprends comment vérifier l'étiquette dans cellForIndexPath et ce n'est pas un problème pour effectuer différentes actions pour plusieurs boutons. Le problème est que je ne sais pas comment le faire dans prepareForSegue afin d'afficher les données basées sur le bouton. – Sargot