594 votes

Quelles sont Détendez-vous enchaîne et comment les utilisez-vous?

iOS 6 et Xcode 4.5 a une nouvelle fonctionnalité appelée "Détendez-vous Segue":

Détendez-vous enchaîne peut permettre la transition vers les instances existantes de scènes dans un storyboard

En plus de cette brève entrée dans Xcode 4.5 notes de mise à jour, UIViewController semblent désormais avoir un couple de nouvelles méthodes:

- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
- (UIViewController *)viewControllerForUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier

Comment se Détendre enchaîne travail et ce qu'ils peuvent être utilisés pour?

1277voto

Imre Kelényi Points 8128

En un Mot

Un détendez-vous segue peut être utilisé pour naviguer à travers pousser, modale ou liste enchaîne (comme si vous avez sauté l'élément de navigation de la barre de navigation, a fermé la fenêtre pop-over ou rejeté le modal présenté-vue-contrôleur). Sur le dessus de ce que vous pouvez réellement vous détendre à travers non seulement une, mais une série de push/modal/liste enchaîne, par exemple, "aller retour" de multiples étapes de votre hiérarchie de navigation avec un seul détendez-vous à l'action.

Lorsque vous effectuez une détendez-vous enchaîner, vous devez spécifier une action, qui est une méthode d'action de la vue-contrôleur que vous voulez pour se détendre.

- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}

Le nom de cette méthode d'action est utilisé lorsque vous créez le vous détendre segue dans le storyboard. En outre, cette méthode est appelée juste avant le déroulement des enchaînements est effectuée. Vous pouvez obtenir la vue de source de contrôleur de l' UIStoryboardSegue paramètre d'interagir avec l'affichage du contrôleur qui a initié la séquence (par exemple, pour obtenir les valeurs des propriétés d'un modal-vue-contrôleur). À cet égard, la méthode a une fonction similaire à celle de l' prepareForSegue: méthode de UIViewController.

Un Exemple

Laissez-nous avoir une table de montage avec une manette de navigation et de trois enfants de vue des contrôleurs:

enter image description here

Du Vert-Vue-Contrôleur, vous pouvez vous détendre (revenir) à Rouge-Vue-Contrôleur. Du Bleu, vous pourrez vous détendre au Vert ou au Rouge en passant par le Vert. Pour activer le déroulement, vous devez ajouter l'action spéciale méthodes de Rouge et de Vert, par exemple, ici est la méthode de l'action en Rouge:

@implementation RedViewController

- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}

@end

Après la méthode de l'action a été ajouté, vous pouvez définir le déroulement segue dans la table de montage séquentiel par contrôle en la faisant glisser vers l'icône de la Sortie. Nous voulons ici pour se détendre de Rouge, de Vert quand le bouton est pressé:

enter image description here

Vous devez sélectionner l'action qui est défini dans la vue contrôleur que vous souhaitez pour se détendre:

enter image description here

Vous pouvez également vous détendre au Rouge, du Bleu (qui est "à deux pas" dans la pile de navigation). La clé est de choisir le bon se détendre à l'action.

Avant le déroulement de la séquence est effectuée, la méthode d'action est appelé. Dans l'exemple, j'ai défini un déroulement des enchaînements de Rouge, de Vert et de Bleu. Nous pouvons accéder à la source de l'détendez-vous dans la méthode de l'action via le UIStoryboardSegue paramètre:

- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
    UIViewController* sourceViewController = unwindSegue.sourceViewController;

    if ([sourceViewController isKindOfClass:[BlueViewController class]])
    {
        NSLog(@"Coming from BLUE!");
    }
    else if ([sourceViewController isKindOfClass:[GreenViewController class]])
    {
        NSLog(@"Coming from GREEN!");
    }
}

Déroulement fonctionne aussi grâce à une combinaison de push/modal enchaîne. E. g. si j'ai ajouté un autre Jaune-vue-contrôleur avec un modal segue, on pouvait se détendre de Jaune à Rouge en une seule étape:

enter image description here

Déroulement de Code

Lorsque vous définissez un déroulement segue par contrôle en faisant glisser quelque chose à la Sortie symbole de une-vue-contrôleur, une nouvelle séquence s'affiche dans le plan du Document:

enter image description here

La sélection de la séquence et va les Attributs de l'Inspecteur de révèle le "Identifiant" de la propriété. L'utiliser pour donner un identifiant unique à votre segue:

enter image description here

Après cela, le déroulement des enchaînements peuvent être effectuées à partir du code, tout comme toute autre segue:

[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];

169voto

Travis M. Points 1488

Aussi loin que la façon de l'utiliser vous détendre enchaîne dans StoryBoard...

Étape 1) Le strict minimum dont vous avez besoin est une classe de la vue-contrôleur pour votre destination de vue (aka, un point de vue qui a été utilisée précédemment dans la navigation et vous voulez vous détendre à elle), et ajouter une méthode comme celle-ci (le nom de la méthode peut être quelque chose que vous voulez, mais il doit être unique, car tous les détendez-vous enchaîne dans l'ensemble de votre application sont indiquées):

- (IBAction)unwindToViewControllerNameHere:(UIStoryboardSegue *)segue {
    //nothing goes here
}

Étape 2) Maintenant, dans votre vue de la source (aka, la vue que vous voulez vous détendre après) il vous suffit de faire glisser un des enchaînements de votre bouton ou que ce soit vers le bas pour le peu de vert icône "QUITTER" au bas de votre vue de la source. Il devrait maintenant être une option pour vous connecter à "- unwindToViewControllerNameHere"

Ça y est, votre segue permettra de vous détendre lors de votre bouton est actionné.

Les autres méthodes que vous avez énumérés peuvent être utilisés pour préparer des données pour se détendre.

46voto

Yang Meyer Points 2054

Détendez-vous enchaîne sont utilisés pour "revenir en arrière" pour certains-vue-contrôleur à partir de laquelle, par le biais d'un certain nombre de enchaîne, vous avez obtenu le "en cours" - vue-contrôleur.

Imaginez que vous avez quelque chose d'un MyNavController avec A que sa racine-vue-contrôleur. Maintenant, vous utilisez une poussée des enchaînements d' B. Maintenant la manette de navigation a et B dans ses viewControllers tableau, et B est visible. Maintenant, vous présente C modal.

Avec détendez-vous enchaîne, vous pouvez maintenant vous détendre "retour" de l' C de B (c'est à dire rejetant le modal présenté-vue-contrôleur), en gros, de "défaire" le modal segue. Vous pouvez même vous détendre tout le chemin du retour à la vue racine contrôleur A, revenant ainsi à la fois la modale des enchaînements et de la poussée des enchaînements.

Détendez-vous enchaîne faire, il est facile de revenir en arrière. Par exemple, avant d'iOS 6, la meilleure pratique pour rejetant présentés vue des contrôleurs a été de définir la présentation d'afficher le contrôleur de la vue du contrôleur délégué, puis appelez votre délégué personnalisé méthode, qui rejette ensuite l'presentedViewController. Le son lourd et compliqué? Il était. C'est pourquoi vous détendre enchaîne sont gentils.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X