Existe-t-il un moyen de vérifier si une vue modale est présente? Je voudrais exécuter une méthode uniquement si une vue modale est présente. De plus, si j'ai plusieurs vues modales, existe-t-il un moyen de vérifier si une certaine vue modale est présente.
J'utilise le code suivant pour présenter et ignorer les vues modales:
[self presentModalViewController:myModalView animated:YES];
[self dismissModalViewControllerAnimated:YES];
Merci d'avance!
À la vôtre, Evan
PS. Ma vue modale a un contrôleur de vue, mais je voudrais vérifier si la vue modale est présente à partir d'une classe distincte qui s'exécute de manière asynchrone.
Vérifiez-vous la présence d'un contrôleur de vue modale à partir du contrôleur de vue parent? Si c'est le cas, vous pouvez simplement vérifier la propriété modalViewController de ce contrôleur de vue:
BOOL modalPresent = (self.modalViewController);
Si vous souhaitez rechercher un contrôleur de vue modal particulier, vous pouvez obtenir le nom de classe du contrôleur de vue modale comme ceci:
NSString *modalClassName = NSStringFromClass([self.modalViewController class]);
Vous pouvez vérifier en utilisant: self.presentedViewController
, qui renvoie The view controller that is presented by this view controller, or one of its ancestors in the view controller hierarchy.
Ce qui a fonctionné pour moi est le suivant:
// this is the trick: set parent view controller as application's window root view controller
UIApplication.sharedApplication.delegate.window.rootViewController = viewController;
// assert no modal view is presented
XCTAssertNil(viewController.presentedViewController);
// simulate button tap which shows modal view controller
[viewController.deleteButton sendActionsForControlEvents:UIControlEventTouchUpInside];
// assert that modal view controller is presented
XCTAssertEqualObjects(viewController.presentedViewController.class, MyModalViewController.class);
Pour autant que je l'ai testé, cela fonctionne pour iOS7 et iOS8. Cependant, je n'ai pas essayé sur iOS6.
Vous pouvez vérifier la présence d'un modal view controller
du parent view controller
if ( [[self presentingViewController] presentingViewController] ) {
}