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

Eva*_*son 55 views modal-dialog ios

有没有办法检查是否存在模态视图?我想仅在存在模态视图时才运行方法.此外,如果我有多个模态视图,有没有办法检查是否存在某个模态视图.

我使用以下代码来呈现和消除模态视图:

    [self presentModalViewController:myModalView animated:YES];
    [self dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

先感谢您!

干杯,埃文

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

arl*_*dia 75

您是否从父视图控制器检查模态视图控制器的存在?如果是这样,你可以检查视图控制器的modalViewController属性:

BOOL modalPresent = (self.modalViewController);
Run Code Online (Sandbox Code Playgroud)

如果要检查特定的模态视图控制器,可以获得模态视图控制器的类名,如下所示:

NSString *modalClassName = NSStringFromClass([self.modalViewController class]);
Run Code Online (Sandbox Code Playgroud)

  • self.modalViewController现已弃用,你现在应该使用BOOL modalPresent =(BOOL)(self.presentedViewController); (56认同)
  • 要依赖@ allaire的评论,这里是presentViewController的文档(http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/ UIViewController/presentsViewController)似乎表明模态视图控制器只有在"this"视图呈现时才存在. (2认同)

tip*_*low 59

您可以使用:self.presentedViewController,返回The view controller that is presented by this view controller, or one of its ancestors in the view controller hierarchy.

  • 这应该是经过检查的答案.不推荐使用`modalViewController` (6认同)

mix*_*y87 6

对我有用的是:

// 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);
Run Code Online (Sandbox Code Playgroud)

据我测试,这适用于iOS7和iOS8.但是没试过iOS6.