iOS - How to check if a modal view is present iOS - How to check if a modal view is present ios ios

iOS - How to check if a modal view is present


Are you checking the presence of a modal view controller from the parent view controller? If so, you can just check that view controller's modalViewController property:

BOOL modalPresent = (self.modalViewController);

If you want to check for a particular modal view controller, you can get the modal view controller's class name like this:

NSString *modalClassName = NSStringFromClass([self.modalViewController class]);


You can check using: self.presentedViewController, which returns The view controller that is presented by this view controller, or one of its ancestors in the view controller hierarchy.


What worked for me is following:

// this is the trick: set parent view controller as application's window root view controllerUIApplication.sharedApplication.delegate.window.rootViewController = viewController;// assert no modal view is presentedXCTAssertNil(viewController.presentedViewController);// simulate button tap which shows modal view controller[viewController.deleteButton sendActionsForControlEvents:UIControlEventTouchUpInside];// assert that modal view controller is presentedXCTAssertEqualObjects(viewController.presentedViewController.class, MyModalViewController.class);

As far as I tested it, this works for iOS7 and iOS8. Didn't try on iOS6 however.