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étendre 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?
Vous devez vous connecter pour publier un commentaire.
En un Mot
Un détendez-vous segue (parfois appelé sortie 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 vous voulez vous détendre à.
Objective-C:
Swift:
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 dans le passé
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 duprepareForSegue:
méthode deUIViewController
.iOS 8 mise à jour: Détendre enchaîne également fonctionner avec iOS 8 adaptatif enchaîne, comme Montrer et Montrer les Détails.
Un Exemple
Laissez-nous avoir une table de montage avec une manette de navigation et de trois enfants de vue des contrôleurs:
De 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:
Objective-C:
Swift:
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é:
Vous devez sélectionner l'action qui est défini dans la vue du contrôleur que vous voulez vous détendre à:
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:
Objective-C:
Swift:
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:
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:
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:
Après cela, le déroulement des enchaînements peuvent être effectuées à partir du code, tout comme toute autre segue:
Objective-C:
Swift:
dismissViewControllerAnimated:completion:
oupopViewControllerAnimated:
réaliser la même chose?dismissViewControllerAnimated:completion:
oupopViewControllerAnimated:
est que la méthode que vous avez ajouté à la vue du contrôleur que vous dénouement est appelé et vous avez un moyen facile de savoir la-vue-contrôleur est terminé sans avoir à faire la présentation de view controller un délégué de la vue-contrôleur.unwindToRed
méthode vide et il sera automatiquement fermer la modale.self.navigationController push
dans leviewDidAppear
fonction de la place, ce qui va pousser un view controller juste après que le courant est apparu. Vous aurez également besoin d'utiliser unBool
de décider si vous voulez pousser.performSegueWithIdentifier:sender:
)Dans la façon de l'utiliser vous détendre enchaîne dans StoryBoard...
Étape 1)
Aller dans le code pour la vue-contrôleur que vous souhaitez détendez-vous et ajouter ceci:
Objective-C
Assurez-vous également de déclarer cette méthode dans votre .h fichier en Obj-C
Swift
Étape 2)
Dans le storyboard, aller à la vue que vous avez envie de vous de et il suffit de glisser une séquence à partir de votre bouton ou jusqu'à ce que le peu d'orange l'icône "QUITTER" en haut à droite de votre vue de la source.
Il devrait maintenant être une option pour vous connecter à "- unwindToViewControllerNameHere"
C'est ça, votre segue permettra de vous détendre lors de votre bouton est actionné.
Détendre 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
avecA
que sa racine-vue-contrôleur. Maintenant, vous utilisez un poussoir segue àB
. Maintenant la manette de navigation a et B dans sesviewControllers
tableau, et B est visible. Maintenant, vous présenteC
modal.Avec détendez-vous enchaîne, vous pouvez maintenant vous détendre "retour" à partir de
C
àB
(c'est à dire rejetant le modal présenté-vue-contrôleur), en gros, "défaire" le modal segue. Vous pouvez même vous détendre tout le chemin du retour à la vue racine contrôleurA
, revenant ainsi à la fois la modale des enchaînements et de la poussée des enchaînements.Détendre 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é à 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.
dismissViewController:animated
de l'présenté contrôleur. Vous n'avez pas à déléguer. Bien sûr, si vous avez besoin de passer des données de retour, alors vous avez besoin de délégation ou d'une autre méthode.dismissViewController:animated:
de l'présenté contrôleur, de "meilleures pratiques" a été en effet à l'appel d'un délégué de la méthode sur la présentation de contrôleur de le faire pour vous, comme Yang mentionné.Quelque chose que je n'ai pas vu mentionné dans les autres réponses ici est la façon dont vous traitez avec déroulage, lorsque vous ne savez pas où la première séquence origine, ce qui pour moi est encore plus important de cas d'utilisation. Par exemple, disons que vous avez un aide-vue-contrôleur (H) que vous affichez modal à partir de deux point de vue différent de contrôleurs (Un et B):
UN → H
B → H
Comment vous définir le déroulement des enchaînements de sorte que vous revenir à l'affichage correct du contrôleur? La réponse est que vous déclarez un déroulement de l'action dans Un et B avec le même nom, par exemple:
De cette façon, le déroulement trouverez selon la vue-contrôleur (Un ou B) a lancé la séquence et revenir à elle.
En d'autres termes, penser le déroulement de l'action comme décrivant où la séquence est à venir de, plutôt que là où il va.
Swift sur iOS:
Étape 1: définir cette méthode dans votre contrôleur MAÎTRE de la vue. dans lequel vous souhaitez revenir en arrière:
Étape 2: (StoryBoard) clic Droit sur vous ESCLAVE/ENFANT bouton de SORTIE et Sélectionnez "goToSideMenu" Que l'action pour vous Connecter Bouton sur lequel vous cliquez pour revenir à vous MAÎTRE contrôleur de vue:
étape 3: créer et d'Exécuter des ...
Par exemple, si vous naviguez à partir de viewControllerB à viewControllerA puis dans votre viewControllerA ci-dessous le délégué à l'appel et les données de l'action.