Je crée une application à l'aide du SDK iOS 5. J'ai réussi à pousser des vues en utilisant les Segues du Storyboard, mais je ne trouve pas le moyen approprié pour afficher la vue actuelle et revenir à la précédente.
Je n'utilise aucun navigationController (l'application n'a pas de barre supérieure ou inférieure).
Je ne pense pas que l'utilisation de modal ou de Push segue dans l'autre sens serait la solution car elle instancie un nouveau contrôleur.
Dois-je utiliser un Segue personnalisé avec l'animation opposée et la suppression de la vue à la fin? Ou y a-t-il un meilleur moyen?
Vous pouvez essayer d'appeler [self dismissViewControllerAnimated:YES completion:nil];
du contrôleur que vous voulez ignorer (que le contrôleur ait été poussé ou affiché de manière modale).
Voici la documentation associée: IViewController Class Reference
Le contrôleur de vue de présentation est responsable de la suppression du contrôleur de vue qu'il a présenté. Si vous appelez cette méthode sur le contrôleur de vue présenté lui-même, elle transmet automatiquement le message au contrôleur de vue de présentation.
Les storyboards dans iOS 5 ne fournissent pas un moyen "sans code" de revenir d'une séquence - c'est quelque chose que vous devrez implémenter vous-même.
Si vous utilisez des segments "Push" (qui nécessitent un contrôleur de navigation), utilisez le contrôleur de navigation popViewControllerAnimated:
méthode pour annuler la dernière séquence Push. (Ou d'autres méthodes pour annuler davantage; voir la documentation UINavigationController
.)
Si vous utilisez des segments "modaux", appelez dismissViewControllerAnimated:completion:
sur le contrôleur de vue qui présentait le contrôleur de vue actuel (que vous pouvez obtenir à partir de sa propriété presentingViewController
).
Mise à jour: Dans iOS 6 et les versions ultérieures, il y a des segments de déroulement pour revenir "en arrière" dans un storyboard. Ce n'est toujours pas une solution sans code - et cela ne devrait pas l'être, car vous devez être capable de faire des choses comme faire la différence entre les sorties "Terminé" et "Annuler" à partir d'un contrôleur de vue modale. Mais cela vous permet d'intégrer davantage le flux sémantique de votre application dans le storyboard. Apple a un note technique qui les décrit en détail , et ils sont également traités dans la vidéo de la session 407 de la WWDC 2012 .
Créez le type Segue "Custom" sur votre stroyboard. Cela peut provenir d'un bouton. Créez une nouvelle classe UIStoryboardSegue nommée "popSegue" Dans le fichier popSegue.m, ajoutez ce qui suit;
-(void)perform{
UIViewController *sourceViewContreoller = [self sourceViewController];
[sourceViewContreoller.navigationController popViewControllerAnimated:YES];
}
-Dans l'éditeur de storyboard.
-Sélectionnez le segue et changez la classe Segue en "popSegue"
-Définissez l'identifiant sur "popSegue"
Terminé!
Vous pouvez utiliser la même classe "popSegue" tout au long de votre projet.
J'espère que cela t'aides
J'utilise aussi Xcode 5 et voici comment procéder. Tout d'abord, dans le fichier de code de vue qui a poussé l'autre, créez une méthode IBAction dans le fichier .h comme celle-ci:
- (IBAction)exitToHere:(UIStoryboardPopoverSegue *)segue sender:(id)sender;
Then in the .m file add this:
- (IBAction)exitToHere:(UIStoryboardPopoverSegue *)segue sender:(id)sender {
}
Vous pouvez ajouter n'importe quel code de nettoyage que vous souhaitez exécuter dans cette méthode. Ensuite, accédez à votre storyboard et sélectionnez la vue poussée. Je suppose que vous avez une sorte de bouton sur la vue que l'utilisateur appuie pour signaler qu'il a terminé. Cliquez sur ce bouton, maintenez la touche enfoncée et faites glisser vers la case verte sous la vue qui est la sortie. Relâchez le bouton de la souris mais continuez à maintenir la touche enfoncée. Une fenêtre contextuelle apparaîtra et votre méthode s'affichera dans la liste. Sélectionnez cette méthode. Maintenant, lorsque l'utilisateur clique sur le bouton, la vue apparaît et vous revenez à la méthode de départ.