web-dev-qa-db-fra.com

iOS - Comment vérifier si une vue modale est présente

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.

55
Evan Johnson

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]);
75
arlomedia

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.

58
tipycalFlow

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.

6
mixtly87

Vous pouvez vérifier la présence d'un modal view controller du parent view controller

if ( [[self presentingViewController] presentingViewController] ) {

}
1
Binoy jose