web-dev-qa-db-fra.com

Impossible de connecter Storyboard Unwind Segue

J'essaie de créer une séquence de déroulement, mais rien ne s'y connectera si vous appuyez sur Ctrl + glisser. De plus, lorsque je clique avec le bouton droit sur l'icône Quitter, aucune option n'est disponible.

enter image description here

Des idées?

24
Chris Wagner

Vous devez définir une action IBAction sur un contrôleur de vue prenant un argument de type "UIStoryboardSegue *".

Quelque chose comme ça:

@interface MyViewController
...
- (IBAction)unwindFromConfirmationForm:(UIStoryboardSegue *)segue {
}
...
@end

Swift 3 Version

@IBAction func unwindToViewController(segue: UIStoryboardSegue) {

    //code

}

_ {Fourni par DoruChidean in https://stackoverflow.com/a/46199117/250190

66
Jon Hess

Juste pour clarifier, pour lier ceci dans le storyboard, après avoir ajouté la méthode ci-dessus au "contrôleur de vue que vous voulez décompresser", vous devez faire glisser une séquence à partir d'un bouton ou de ce que vous voulez dans votre "contrôleur de vue que vous voulez décompresser" à il possède une petite icône verte "EXIT" dans la barre inférieure. 

Il devrait y avoir une fenêtre contextuelle pour créer un lien vers "- unwindFromConfirmationForm". 

Une fois que cela est fait, la séquence de détente devrait fonctionner.


En ajoutant à Travis un excellent point: pour être tout à fait clair:

Supposons que vous venez de commencer à expérimenter des story-boards afin (a) de créer un nouveau projet Xcode iOS7 et (b) de créer un story-board avec un contrôleur de navigation, puis (c) de créer cinq ou six contrôleurs de vue. Vous voulez pouvoir aller et venir entre la demi-douzaine de contrôleurs de vue à l’aide des fonctions de déroulement. {Il est trivial d’avancer en avant en faisant glisser tout le contrôle d’un bouton à l’autre, puis le suivant.}

Maintenant, à ce moment: les six contrôleurs de vue, sera bien la classe "par défaut" "ViewController". Notez que Xcode (un peu inutile) vous donne un fichier ViewController.h et ViewController.m.

Encore une fois, vos six vues "exemples simples" n'utilisent en fait que le fichier ViewController.m, en ce moment. Donc, très simplement, si vous ajoutez ceci:

-(IBAction)unwindUnused:(UIStoryboardSegue *)segue
    {
    NSLog(@"I did an unwind segway! Holy crap!");
    }

Sur ce fichier "ViewController.m" stub - en fait, chacune de vos six vues va maintenant "fonctionner", vous pourrez faire glisser le fameux petit bouton vert "Quitter". C'est si facile.

Maintenant, juste TBC normalement dans un projet réel, vous n’utiliseriez jamais le fichier par défaut "ViewController.m". Alors, allez ici:

https://developer.Apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOS/SecondTutorial.html

et trouvez précisément "Créer des contrôleurs de vue personnalisés", et il explique bien sûr ce processus avec un niveau de détail excellent si vous êtes nouveau.

Mais encore une fois, si vous vous contentez de bricoler et que vous voulez que le bouton vert fonctionne pour le déroulement, insérez simplement le fragment de code dans le fichier de raccord "ViewController.m", et vous êtes absent. (En vous rappelant que dans la "vraie vie", vous mettriez un tel appel personnalisé dans chacun de vos écrans personnalisés (traitant probablement des données, etc.). J'espère que cela vous aidera!

Bonus factoid: Notez qu'un bouton "Précédent" apparaîtra de toute façon automatiquement sur la barre de navigation lorsque vous testez comme ça! (c’est-à-dire même si vous n’ajoutez pas la méthode du stub de déroulement.)

18
Travis M.

Vote positif pour Jon Hess! C'est l'équivalent de Swift 3

@IBAction func unwindToViewController(segue: UIStoryboardSegue) {

    //code

}
1
DoruChidean

Travaillez-vous avec la version xcode6-beta? in beta 1-3 est un bug qui empêche le constructeur d’interface de détecter les séquences de déroulement. dans xcode6-beta4, ce bogue a été corrigé.

0
Fred