【问题标题】:iOS - How to check if a modal view is presentiOS - 如何检查模式视图是否存在
【发布时间】:2011-07-17 07:40:58
【问题描述】:

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

我使用以下代码来呈现和关闭模式视图:

    [self presentModalViewController:myModalView animated:YES];
    [self dismissModalViewControllerAnimated:YES];

提前谢谢你!

干杯, 埃文

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

【问题讨论】:

  • 请考虑更改此问题的正确答案。

标签: ios views modal-dialog


【解决方案1】:

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

BOOL modalPresent = (self.modalViewController);

如果你想检查一个特定的模态视图控制器,你可以像这样获取模态视图控制器的类名:

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

【讨论】:

  • self.modalViewController 现已弃用,您现在应该使用 BOOL modalPresent = (BOOL)(self.presentedViewController);
  • 要搭载@allaire 的评论,这里是有关presentedViewController (developer.apple.com/library/ios/#documentation/UIKit/Reference/…) 的文档,它似乎表明只有在“this”视图呈现模式视图控制器时才存在。
【解决方案2】:

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

【讨论】:

  • 这应该是选中的答案。 modalViewController 已弃用
  • 现在使用presentedViewController
【解决方案3】:

对我有用的是:

// 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 上尝试。

【讨论】:

  • 如果您的 UIViewController 嵌入其中,请不要忘记将 UINavigationController 添加为窗口的 rootViewController。然后只需在该 navController 上调用presentedViewController。 :)
【解决方案4】:

您可以从父 view controller 检查模态 view controller 的存在

if ( [[self presentingViewController] presentingViewController] ) {

}

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多