iOS-如何检查是否存在模式视图

iOS-如何检查是否存在模式视图,ios,views,modal-dialog,Ios,Views,Modal Dialog,是否有方法检查是否存在模态视图?我只想在模态视图存在时运行一个方法。另外,如果我有多个模态视图,是否有方法检查是否存在某个模态视图 我使用以下代码来显示和取消模式视图: [self presentModalViewController:myModalView animated:YES]; [self dismissModalViewControllerAnimated:YES]; 提前谢谢你 干杯, 埃文 注:我的模态视图有一个视图控制器,但我想检查模态视图是否存在于异步运行的

是否有方法检查是否存在模态视图?我只想在模态视图存在时运行一个方法。另外,如果我有多个模态视图,是否有方法检查是否存在某个模态视图

我使用以下代码来显示和取消模式视图:

    [self presentModalViewController:myModalView animated:YES];
    [self dismissModalViewControllerAnimated:YES];
提前谢谢你

干杯, 埃文


注:我的模态视图有一个视图控制器,但我想检查模态视图是否存在于异步运行的单独类中。

是否检查父视图控制器中是否存在模态视图控制器?如果是,您只需检查该视图控制器的modalViewController属性:

BOOL modalPresent = (self.modalViewController);
如果要检查特定的模态视图控制器,可以获取模态视图控制器的类名,如下所示:

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

您可以使用以下方法进行检查:
self.presentedViewController
,它返回此视图控制器或其在视图控制器层次结构中的祖先之一所显示的视图控制器。对我有效的方法如下:

// 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);

就我测试而言,它适用于iOS7和iOS8。但是,没有尝试iOS6。

您可以从父视图控制器检查模态视图控制器的存在

if ( [[self presentingViewController] presentingViewController] ) {

}

请考虑更改这个问题的正确答案。Self.MODALVIEW控制器现在被弃用,您现在应该使用BoOL MODALNETHONE =(BOOL)(Surviv.PrimeDead VIEW控制器);借助@allaire的评论,这里是presentedViewController()上的文档,它似乎表明只有当模态视图控制器由“this”视图呈现时才存在。这应该是选中的答案
modalViewController
现在不推荐使用。如果UIViewController嵌入了UIViewController,请不要忘记添加UINavigationController作为窗口的rootViewController。然后只需在navController上调用presentedViewController.:)