web-dev-qa-db-fra.com

Storyboard Xcode 4.5 'Quitter'

Je viens d'installer Xcode 4.5 pour le support iOS6, et j'ai vu une nouvelle icône appelée `` Quitter '' dans mon Storyboard, répertoriée sous mes contrôleurs de vue avec `` Premier répondant '', etc. Une petite icône verte intitulée `` Quitter ''.

Je peux y trouver quoi que ce soit ni trouver comment l'utiliser.

Quelqu'un sait quoi que ce soit à ce sujet, comment cela fonctionne, à quoi ça sert?

102
Josh Kahane

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

Les séquences de déroulement peuvent 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 de vidéos WWDC 2012 et regarder "Adopter le storyboard dans votre application" (c'est le cinquième à partir du haut). La discussion sur le déroulement segues commence à l'heure 37:20.


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

Un espace réservé nommé Exit pour dérouler les séques. Par défaut, lorsqu'un utilisateur rejette une scène enfant, le contrôleur de vue de cette scène se déroule (ou retourne) à la scène parent, c'est-à-dire la scène qui a initialement effectué la transition vers la scène enfant. Cependant, l'objet Exit permet à un contrôleur de vue de se dérouler vers une scène arbitraire.

(à partir du 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 concernant ce sujet.

72
Alladinian

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

A -> ... -> Z

Vous voulez avoir un bouton sur la vue Z qui permet à l'utilisateur de remonter jusqu'à A.

Donc, ce que vous devez faire est de donner la vue que vous souhaitez sauvegarder jusqu'à, dans ce cas, A, une méthode d'instance qui est marquée comme IBAction et prend un paramètre unique de type UIStoryboardSegue *. 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 d'importance non plus. Voici un exemple:

Obj-C:
Dans l'interface de A (pas celle de Z):

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

Dans l'implémentation de A (pas de Z):

- (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 la source de A (pas celle de Z):

@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, control faites glisser d'un élément sur Z (IE, un bouton d'annulation) vers ZExit. Il parcourra toutes les vues plus haut dans la hiérarchie des vues qui ont un IBAction qui n'accepte qu'un seul UIStoryboardSegue * en tant qu'action et répertoriez-les parmi lesquelles 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 toujours 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

10
ArtOfWarfare

Voir aussi Cannot Connect Storyboard Unwind Segue qui clarifie les exigences pour donner vie à l'icône Quitter. 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-déplacer depuis un bouton du même contrôleur de vue.

J'ai également affiché ici l'exemple le plus simple au monde:

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

Cela montre à quel point il est facile de se connecter à et de revenir depuis un contrôleur de vue présenté, par opposition à tout le travail que vous aviez à faire auparavant pour pour transmettre des informations d'avant en arrière (les éléments du modèle avec un délégué et un protocole, qui peuvent tous être supprimés).

4
matt

Il suffit d'ajouter une légère subtilité à la définition des exigences qui pourrait aider. Ceci est basé sur l'expérimentation de 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 les exigences complètes:

  • 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 [ce qui signifie une méthode dans la section d'implémentation de .M]).
  • Il peut être dans la déclaration d'interface de n'importe quelle classe, même dans la section interface d'un .M, À l'exception de la classe appdelegate. (Je n'ai vu aucune dépendance à 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 paramètre UIStoryboardSegue et les afficher dans le menu de l'icône Quitter.) Notez que le menu de contrôle-glisser 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 déclencher aucune action au moment de l'exécution.

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

3
Jack Bellis