Est-ce que quelqu'un sait à quoi sert la nouvelle icône Quitter lors de l'édition de storyboards à l'aide de Xcode 4.5?

100

Un clic droit sur l'icône Quitter produit une fenêtre vide. Impossible de faire glisser une connexion vers des éléments IB ou des fichiers source correspondants tout en maintenant la touche Ctrl enfoncée. Les documents ne donnent aucun amour. N'apparaît pas dans les fichiers nib, uniquement les storyboards. Je suppose que c'est un corollaire de segues, mais je ne vois aucune nouvelle méthode pour le sauvegarder. N'importe qui?

rsswtmr
la source

Réponses:

104

Il y a beaucoup d'informations dans la vidéo de la WWDC «Session 407 - Adopter des storyboards dans votre application».

Supposons que vous ayez deux contrôleurs de vue liés par une séquence. Implémentez l'action de sortie suivante sur le premier contrôleur de vue:

- (IBAction)done:(UIStoryboardSegue *)segue {
    NSLog(@"Popping back to this view controller!");
    // reset UI elements etc here
}

Ensuite, sur la scène Storyboard pour le deuxième contrôleur de vue, faites glisser tout en maintenant la touche Ctrl enfoncée à partir d'un élément de l'interface utilisateur, tel qu'un bouton, jusqu'à l'icône de sortie en bas de ce contrôleur de vue. L' done:action que vous avez ajoutée au code du premier contrôleur apparaîtra comme une option. Maintenant, l'activation du bouton que vous avez fait glisser vers l'icône de sortie fera apparaître le premier contrôleur de vue et conservera son état d'origine (c'est-à-dire les éléments de l'interface utilisateur tels que l'entrée de texte supposément toujours intacts).

Cal S
la source
3
Il se déroule en fait à la même instance exacte du contrôleur de vue (et ses vues).
Jon Hess
Merci, je lisais ceci juste pour savoir ce qu'était la "sortie verte", seulement pour découvrir qu'elle résout un problème pour moi. J'avais 2 contrôleurs de vue séparés par un contrôleur TabBar et un contrôleur de navigation, et "Pop" ne fonctionnait pas pour revenir en arrière. Cela a pris 2 minutes et tout a fonctionné comme vous l'avez dit! MERCI!
user589642
Comment puis-je appeler la méthode d'action sur le Donebouton de la classe de vue B avant de revenir à la vue A?
expert
Si vous regardez la vidéo de la WWDC, vous pouvez passer à 37:15 pour voir la partie sur "dérouler les segues"
moliveira
220

J'ai eu du mal à suivre la réponse acceptée, alors voici plus de détails.

Compte tenu de la photo ci-dessous sur le contrôleur de vue C, vous pouvez "quitter" pour revenir à n'importe quel contrôleur de vue dans le chemin de segue.

entrez la description de l'image ici

ViewController A vous pouvez écrire:

- (IBAction)done:(UIStoryboardSegue *)segue {
    // Optional place to read data from closing controller
}

ViewController B vous pouvez écrire:

- (IBAction)back:(UIStoryboardSegue *)segue {
    // Optional place to read data from closing controller
}

ViewController C vous contrôlez le glisser du bouton «retour» à l'option de sortie verte et sélectionnez retour: ViewController C vous contrôlez le glisser du bouton «terminé» à l'option de sortie verte et sélectionnez terminé: entrez la description de l'image ici

Note: Même si les méthodes sont sur d' autres contrôleurs de vue , ils apparaissent pour la ViewController C sortie de. Contrôler le glissement et la sélection d'une méthode définit le ViewController vers lequel se dérouler.

Eric
la source
2
Une dernière remarque: parfois, le bouton de sortie vert n'est pas actif même toutes les étapes sont terminées. Dans ce cas, la réouverture du storyboard (ou du projet xcode) le fait fonctionner comme prévu.
zxcat
3
Un autre problème que j'ai eu était que je n'avais pas mis ma signature de méthode de déroulement de segue dans mon fichier .h ou l'extension de classe. Après l'avoir ajouté, la séquence de déroulement est apparue dans la fenêtre contextuelle.
Steve Moser
2
+ Infinity pourEven though the methods are on other view controllers they show up for the ViewController C's exit.
Santa Claus
15

En plus de la réponse d' Eric, voici comment cela fonctionne avec:

La fonction que vous ajoutez au contrôleur de destination ressemble à ceci:

@IBAction func backFromOtherController(segue: UIStoryboardSegue) {
    NSLog("I'm back from other controller!")
}
jboi
la source