如何确定 UIViewController 是不是已被称为 ModalDialog?

Posted

技术标签:

【中文标题】如何确定 UIViewController 是不是已被称为 ModalDialog?【英文标题】:How to determine if a UIViewController has been called as ModalDialog?如何确定 UIViewController 是否已被称为 ModalDialog? 【发布时间】:2011-03-09 20:53:00 【问题描述】:

在我的应用中,我可以在两种模式下调用 UIViewControle:Push 和 ModalDialog。

一旦 UIViewController 处于活动状态,我如何确定是被调用为 Push 还是 Modal Dialog ?

【问题讨论】:

我在这里使用了解决方案,它处理视图控制器出现在导航/选项卡控制器***.com/a/6349300中的情况 Is it possible to determine whether ViewController is presented as Modal?的可能重复 【参考方案1】:

您可以像这样检查父视图控制器的modalViewController 属性:

if ([self.parentViewController.modalViewController isEqual:self]) 
    NSLog(@"Modal");
 else 
    NSLog(@"Push");

只记得在视图被推送/呈现后检查它。

【讨论】:

这在 ios 5+ 中不起作用,因为 UIViewController 不再为 parentViewController 回答,而是为 presentingViewController 回答。见***.com/questions/2798653/…【参考方案2】:

这对我有用:

   if(self.presentingViewController)
        //modal view controller 

    else


    

【讨论】:

【参考方案3】:

如果您还没有弄清楚这一点,我将分享我的情况以及我如何检测我是否在模态视图控制器中。

我有一个以模态方式呈现视图控制器的 segue。这个视图控制器嵌入在一个 navigationController 中,因此我继承了所有好的 UIBarButtonItem 功能。

if ([self.parentViewController.presentingViewController.modalViewController isEqual:self.parentViewController]) 
   NSLog(@"I'm in a modal view controller!");

希望对你有帮助

【讨论】:

【参考方案4】:

问题是 viewController 本身可能不会出现,但包含它的集合视图控制器是。也许更一般的情况对某人有用:

- (BOOL)isModal 

    return self.presentingViewController.presentedViewController == self
    || (self.navigationController != nil && self.navigationController.presentingViewController.presentedViewController == self.navigationController)
    || [self.tabBarController.presentingViewController isKindOfClass:[UITabBarController class]]; 

【讨论】:

以上是关于如何确定 UIViewController 是不是已被称为 ModalDialog?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查当前是不是正在显示 UIViewController?

如何将 UIToolbar 添加到 UIViewController?

如何检测 iOS UIViewController 是不是被交互或触摸

如何从演示堆栈中删除中间 UIViewController

如何显示 SwiftUI 视图而不是 UIViewController?

如何将 UIImageView 添加到 UIView(不是 UIViewController)?