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)