À jour Xcode/Swift/iOS.Impossible de mettre à jour le conteneur virtuel intégré d'un conteneur VC non parent
J'ai un VC principal (appelé StartVC) qui contient un VC enfant (appelé TopBarVC) via et segue intégré. Le VC enfant contient un bouton qui, lorsqu'il est pressé, se connecte modalement à un troisième VC (appelé CategoryPickerOverlayVC) (la vue dans ce VC sert de liste déroulante pour choisir une catégorie).
@IBAction func CategoryFilterButtonPressed(_ sender: Any) {
performSegue(withIdentifier: "toCategoryPickerOverlay", sender: self)
}
Lorsqu'une option est sélectionnée dans la zone de liste déroulante, qui est lui-même composé de trois boutons, le titre du bouton sélectionné doit être utilisé pour remplacer le texte du titre du bouton dans l'enfant VC.
Dans le VC principal, j'utilise prepareforsegue pour stocker une référence au VC enfant dans une variable - "topBarReference" - au moment où la séquence d'intégration a lieu.
var topBarReference: TopBarVC?
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "TopBarPane"{
topBarReference = segue.destination as? TopBarVC
}
}
Ensuite, dans le 3ème VC, lorsque je clique sur l'une des options de bouton dans la liste déroulante, le titre du bouton est envoyé par un prepareforsegue mettre à jour le bouton dans le VC Enfant (via « topBarReference ») . Le troisième circuit virtuel se déroule ensuite en se rétrécissant vers le circuit maître principal. Je dois ajouter que lorsque le bouton dans le VC enfant est modifié, une variable (filterButtonText) dans Child VC est d'abord définie avec le texte du titre, puis cette variable est utilisée pour définir le texte du titre du bouton via la méthode viewDidAppear de Child VC. Lorsque j'utilise le débogueur, je remarque également que viewDidAppear dans le VC principal ne semble pas s'exécuter après le déroulement (j'ai placé un diagnostic-à-console dans viewDidAppear et rien ne s'imprime après la séquence de déroulement). Je me rends compte que cela expliquerait le bouton ne pas être mis à jour, mais je ne sais pas pourquoi viewDidAppear ne fonctionne pas.
J'ai également essayé d'utiliser un protocole délégué et instantiateViewController (withString :) en vain. Toutes les méthodes produisent le même résultat, à savoir que le bouton du CV enfant n'est pas mis à jour. Aucune erreur n'est affichée. Tout le reste se passe comme prévu.
Des idées sur ce que je fais mal?
si les deux sont "incorporés" dans le StartVC, c'est-à-dire que le StartVC est toujours en train d'être vu, alors l'affichage n'a pas été appelé. Essayez d'utiliser des notifications. Demandez à startVC d'écouter une notification spécifique et de l'envoyer lorsque vous vous désengagez/sélectionnez une option dans la liste déroulante. À l'intérieur de votre code de gestionnaire de notification, mettez à jour le titre du bouton –
Le troisième VC est un VC séparé, non incorporé. – Rossco
"Je ne sais pas pourquoi viewDidAppear ne fonctionne pas" Parce qu'il n'a jamais disparu. Je pense que c'est ce que @ShawnFrank vous a dit aussi. – matt