prepareForSegue et les délégués
J'ai une application avec deux enchaîne. Dans l'un des enchaîne, le point de vue actuel contrôleur devient un délégué et l'autre pas.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"MoreOptions"]) {
UINavigationController *navigationController = segue.destinationViewController;
MoreOptionsViewController *controller = (MoreOptionsViewController *)navigationController.topViewController;
controller.delegate = self;
} else if ([segue.identifier isEqualToString:@"FullStoryView"]) {
SingleStoryViewController *detailViewController = segue.destinationViewController;
detailViewController.urlObject = sender;
}
}
Tout cela fonctionne très bien, mais je voudrais essayer de comprendre le code mieux. Ce que je ne comprends pas c'est que je dois obtenir une référence à l'MoreOptionsViewController par le saisissant de navigationController.topViewController plutôt que de simplement obtenir à partir des enchaînements.destinationViewController comme je le fais dans la seconde si la condition. Est-ce parce que je suis réglage de l'affichage actuel contrôleur (auto) en tant que délégué? Encore une fois, je ne suis pas en train de résoudre un problème, juste essayer d'obtenir une meilleure compréhension de ce qui se passe.
source d'informationauteur Sonny Parlin
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à votre scénario et il devrait être évident pourquoi ce est le cas. Vous avez intégré
MoreOptionsViewController
dans unUINavigationController
et connecté un segue à la manette de navigation, faisant d'elle ladestinationViewController
. Cette situation est assez courante.Le délégué est largement hors de propos dans le contexte de votre question.
Votre première séquence de la destination est une manette de navigation, qui contient la vue du contrôleur que vous vraiment intéresse. Par conséquent, pour obtenir ce point de vue, vous avez besoin de passer par la manette de navigation depuis que de ne pas avoir toutes les propriétés que vous êtes intéressé à mettre en.
Votre deuxième segue va directement à une vue unique de contrôleur, de sorte que vous pouvez y accéder directement.