Swift / comment appeler un délégué avec popViewController

J'ai lu ce fil (et d'autres similaires) de bas en haut, mais cela ne correspond pas du tout à mes besoins.

J'ai un UIViewController intérieur de UIPageViewController dans un UINavigationController . Naviguer vers un 2ème ViewController. Naviguer vers un 3ème ViewController et vouloir revenir au 2ème ViewController fournissant des données.

Mon code actuellement:

 protocol PassClubDelegate { func passClub(passedClub: Club) } class My3rdVC: UIViewController { var clubs: [Club] = [] var passClubDelegate: PassClubDelegate? .... func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { let club = clubs[indexPath.row] self.passClubDelegate?.passClub(club) navigationController?.popViewControllerAnimated(true) } 

Mon deuxième VC:

 class My2ndVC: UIViewController, PassClubDelegate { var club = Club() func passClub(passedClub: Club) { SpeedLog.print("passClub called \(passedClub)") club = passedClub } 

passClub n'est pas appelé. Je suis sûr que c'est parce que je n'ai pas mis le délégué sur My2ndVC, mais comment je ferais ça? Toutes les solutions que j'ai trouvées voulant que j'utilise a) segue ou b) instancient un My2ndVC nouveau, ce qui n'a aucun sens puisque c'est encore en memory et que je veux revenir en arrière pour revenir dans la hiérarchie. Qu'est-ce que je rate? Quelles sont mes possibilités? L'aide est très appréciée.

PS : Je n'utilise pas de segues. My3rdVC est appelé par:

 let vc = stb.instantiateViewControllerWithIdentifier("My3rdVC") as! My3rdVC self.navigationController?.pushViewController(vc, animated: true) 

Vous pouvez définir le délégué de My3rdVC dans la méthode My2ndVC de My2ndVC .

 class My2ndVC: UIViewController, PassClubDelegate { ... override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { super.prepareForSegue(segue, sender: sender) switch segue.destinationController { case let controller as My3rdVC: controller.passClubDelegate = self } } } 

Cela suppose que vous avez créé une séquence dans votre storyboard qui pousse My3rdVC de My2ndVC sur la stack du controller de navigation, ce que je suppose que vous avez. Donc, essayez simplement de coller cette méthode My2ndVC dans My2ndVC et voir si cela fonctionne.

METTRE À JOUR

 let vc = stb.instantiateViewControllerWithIdentifier("My3rdVC") as! My3rdVC vc.passClubDelegate = self navigationController?.pushViewController(vc, animated: true)