À l'aide de storyboards, quelle est la bonne façon de rejeter un modal?
Voir ici rejeter un contrôleur de vue présenté environ à mi-chemin
Quand vient le temps de rejeter un contrôleur de vue présenté, l'approche préférée consiste à laisser le contrôleur de vue présent le rejeter.
Vous devez donc utiliser un IBAction et un code d'écriture pour ignorer après un clic sur le bouton
J'ai trouvé qu'en général, lorsque j'essaie de le faire dans le storyboard, je préfère ne pas créer de classes supplémentaires. Il est toujours judicieux d'effectuer le rejet du contrôleur de vue de présentation, ce qui nécessite une classe pour le sauvegarder.
Si vous créez une IBAction dans le contrôleur de vue de présentation et nommez-la de manière appropriée, par exemple.
- (IBAction)dismissAnyModel:(id)sender
{
[self dismissViewControllerAnimated:YES completion:nil];
}
Ensuite, à partir du storyboard où vous voulez déclencher le rejet de votre part, créez une action pour le premier répondant, comme indiqué ci-dessous. Vous pouvez l'étendre pour qu'il fonctionne avec plusieurs contrôleurs de vue de présentation en créant des noms uniques pour les IBActions.
Plus d'informations sur le premier répondant et la chaîne de répondants
Selon la réponse d'Alex Cio pour Swift 3
et XCode 8.3
:
Créer une classe:
import UIKit
class DismissSegue: UIStoryboardSegue {
override func perform() {
self.source.presentingViewController?.dismiss(animated: true, completion: nil)
}
}
Mais dans le storyboard, vous devez choisir:
Action Segue -> Personnalisé -> ignorer
Ce n'est qu'après que cette option apparaît sur Action Segue
menu
Voir ma réponse ici . Il vous donne deux façons de supprimer le contrôleur de vue modale avec le storyboard. J'aime la méthode deux décrite parce que celle que vous ajoutez la classe dans votre projet, votre retour des vues modales peut être fait sans code en utilisant le storyboard seul. Cela dit, si vous avez implémenté un délégué et un protocole de délégué, c'est également un bon endroit pour mettre la déclaration disableModalViewController.
Pour ce faire à l'intérieur du UIStoryboard
, vous devez d'abord créer un objet de type UIStoryboardSegue
dans votre projet
Insérez ensuite la méthode suivante dans la classe. Voici ma classe
@implementation DismissController
- (void)perform{
UIViewController *sourceVC = self.sourceViewController;
[sourceVC.presentingViewController dismissViewControllerAnimated:YES
completion:nil];
}
Vous pouvez maintenant l'utiliser dans votre UIStoryboard
. Sélectionnez le bouton qui doit faire disparaître le UIViewController
et faites-le glisser vers le UIViewController
vers lequel vous voulez aller. Dans mon cas, il indique ** licencier le contrôleur * en raison du nom de ma classe.
Sélectionnez-le et vous avez terminé! Il y a aussi une très bonne explication sur ce site.