Xcode 4.5 Storyboard 'Quitter'

102

Je viens d'installer Xcode 4.5 pour le support iOS6, et j'ai vu une nouvelle icône appelée «Exit» dans mon Storyboard, listée sous mes contrôleurs de vue avec «First Responder» etc. Une petite icône verte intitulée «Exit».

Je peux trouver quoi que ce soit dessus ni déterminer comment il peut être utilisé.

Quelqu'un sait quelque chose à ce sujet, comment ça marche, à quoi ça sert?

Josh Kahane
la source
1
Sur une question similaire, j'ai posté cette réponse: stackoverflow.com/questions/12569316/… Cela aide à expliquer comment utiliser la fonction de sortie (déroulement)
Eric

Réponses:

72

C'est ce qu'on appelle un " Unwind Segue ". Malheureusement, il n'y a pas de documentation à ce sujet jusqu'à présent, sauf une brève mention sur la liste des nouvelles fonctionnalités de XCode 4.5 qui indique:

Unwind segues peut permettre la transition vers des instances existantes de scènes dans un storyboard

La bonne nouvelle est qu'il y a une session de la WWDC 2012 expliquant ces créatures (entre autres).

Vous pouvez simplement vous connecter au centre de développement iOS d'Apple avec les détails de votre compte de développeur, puis accéder à la page des vidéos de la WWDC 2012 et regarder «Adopting Storyboard in your App» (il est cinquième à partir du haut) La discussion sur les segments de déroulement commence à 37:20 .


Mise à jour: Voici quelques informations supplémentaires sur le sujet dans la documentation d'Apple

Un objet d'espace réservé nommé Exit pour dérouler les séquences. Par défaut, lorsqu'un utilisateur ferme une scène enfant, le contrôleur de vue de cette scène se déroule (ou revient) à la scène parente, c'est-à-dire la scène qui est à l'origine passée à la scène enfant. Cependant, l'objet Exit permet à un contrôleur de vue de se dérouler sur une scène arbitraire.

(Depuis docset iOS6> Général> Mise en route)

Et voici un bel exemple de la façon dont vous pouvez en implémenter un


Une autre mise à jour:

Voici une note technique d'Apple à ce sujet.

Alladinien
la source
3
OK, comment l'utilisez-vous? Tentative de contrôle-clic depuis l'objet de sortie au bas d'un viewcontroller, mais il ne serait lié à rien.
shim
4
Vous devez essentiellement définir une méthode pour votre déroulement, puis vous connecter d'un élément au exitbouton en sélectionnant la méthode que vous souhaitez appeler. Vous pouvez trouver un exemple ici (j'ai également mis à jour ma réponse pour inclure l'exemple)
Alladinian
1
-1: Beaucoup de mots, peu d'informations utiles. Après avoir lu ceci et l'avoir utilisé dans ma propre application, j'ai rédigé cette réponse qui, espérons-le, est plus utile: stackoverflow.com/a/25829835/901641
ArtOfWarfare
1
C'est pourquoi j'adore les documentations Apple inexistantes. Mec, quelqu'un devrait être renvoyé là-bas.
Canard du
@SpaceDog C'est peut-être ce qui s'est passé, ils ont tous été licenciés et personne n'est laissé pour écrire la documentation: / J'adore la vidéo de la WWDC - 2012 est apparemment l'année où Apple a atteint son apogée.
testé par turing le
10

Imaginez que vous ayez une séquence de vues dans votre storyboard:

A -> ... -> Z

Vous souhaitez afficher un bouton Zqui permet à l'utilisateur de revenir àA .

Donc, ce que vous devez faire est de donner à la vue que vous voulez revenir complètement, dans ce cas A, une méthode d'instance qui est marquée comme IBActionet prend dans un seul paramètre de typeUIStoryboardSegue * . Le nom de la méthode et de la variable n'a pas d'importance. Ce que vous faites dans l'implémentation n'a pas non plus d'importance. Voici un exemple:

Obj-C: Interface de
In A(pas Zde):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue;

Dans Ala mise en œuvre de (pas Zde):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

Swift:
Dans Ala source (et non dans Zles):

@IBAction func cancelSignup(unwindSegue: UIStoryboardSegue) {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

Maintenant, dans votre storyboard, controlfaites glisser d'un élément sur Z(IE, un bouton d'annulation) vers Z's Exit. Il parcourra toutes les vues plus haut dans la hiérarchie des vues qui ont un IBActionqui n'accepte qu'une seule UIStoryboardSegue *comme action et les répertorie parmi lesquelles vous pouvez choisir.

J'espère que cela a été plus simple et utile que les réponses existantes. J'ai trouvé que ce lien était particulièrement utile, donc s'il y a un détail sur lequel vous êtes encore flou après avoir lu ma réponse, cela peut peut-être vous aider (j'ai essayé de condenser toutes les informations utiles de ce long article en une réponse courte): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html

ArtOfWarfare
la source
4

Voir également Impossible de connecter Storyboard Unwind Segue qui clarifie les exigences pour donner vie à l'icône de sortie. Vous devez avoir, plus haut dans la hiérarchie du contrôleur de vue, une méthode qui est:

  1. Marqué comme IBAction

  2. Prend un paramètre qui est un UIStoryboardSegue *

Si ces deux conditions sont remplies, l'icône Quitter le verra et vous permettra de vous y connecter en faisant glisser le contrôle à partir d'un bouton dans le même contrôleur de vue.

J'ai également publié l'exemple le plus simple du monde ici:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard (corrigé le 12 juillet 2013)

Cela montre à quel point il est maintenant trivial de passer d' un contrôleur de vue présenté à un contrôleur de vue présenté, par opposition à tout le travail que vous deviez faire auparavant pour transmettre les informations dans les deux sens (les éléments du modèle avec un délégué et un protocole , qui peuvent désormais tous être supprimés).

mat
la source
3

Il suffit d'ajouter une légère subtilité à la définition des exigences qui pourrait aider. Ceci est basé sur des expériences dans Xcode 4.6. J'ai trouvé que c'est spécifiquement et uniquement la déclaration (!) De la méthode qui permet la réponse de contrôle-glisser souhaitée de Xcode. Voici ce que j'ai trouvé être toutes les exigences:

  • Marqué comme IBAction
  • Prend un paramètre qui est un UIStoryboardSegue*
  • Vous devez avoir une action déclarée (mais pas nécessairement implémentée [c'est-à-dire une méthode dans la .Msection implémentation]).
  • Cela peut être dans la déclaration d'interface de n'importe quelle classe, même la section interface de a .M, à l'exception de la classe appdelegate. (Je n'ai vu aucune dépendance sur sa position dans la hiérarchie du contrôleur. Vous pouvez ajouter n'importe quel ancien fichier et le système semble agréger toutes les méthodes qui ont le UIStoryboardSegueparamètre et les afficher dans le menu de l'icône Quitter.) Notez que le contrôle-glisser menu vous montrera même votre méthode si la méthode est dans la classe de la scène que vous manipulez dans l'éditeur de storyboard, mais elle apparaîtra sans deux-points et ne semble pas déclencher d'action à l'exécution.

Exemple: -(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;

Jack Bellis
la source