在 UIAlertController 下获取最顶层的视图控制器

Posted

技术标签:

【中文标题】在 UIAlertController 下获取最顶层的视图控制器【英文标题】:Get top most view controller under UIAlertController 【发布时间】:2018-07-03 14:26:26 【问题描述】:

我正在使用下面的代码来查找最顶层的 ViewController。如果出现警报,上面的代码会给出 UIAlertController。如何在 UIAlertController 下获取顶视图控制器?

+(UIViewController*)topMostViewController:(UIViewController*)rootViewController


    if ([rootViewController isKindOfClass:[UITabBarController class]])
    
        UITabBarController* tabBarController = (UITabBarController*)rootViewController;
        return [self topMostViewController:tabBarController.selectedViewController];
    
    else if ([rootViewController isKindOfClass:[UINavigationController class]])
    
        UINavigationController* navigationController = (UINavigationController*)rootViewController;
        return [self topMostViewController:navigationController.visibleViewController];
    
    else
    
        return rootViewController;
    

有什么想法吗?

【问题讨论】:

你是如何使用上面的代码的,更广泛地说,你为什么要做这个检查?你想完成什么? 【参考方案1】:

更新了答案。由于您想找到可见的最顶层视图控制器,因此您可以使用这两种方法中的任何一种。通过将 UINavigation 控制器作为参数传递,从您当前所在的视图控制器调用此方法。

func  topMostViewController(controller:UINavigationController) -> UIViewController 

    return controller.topViewController!



func  visibleViewController(controller:UINavigationController) -> UIViewController 

    return controller.visibleViewController!


【讨论】:

我尝试了你的想法来找到最顶层的 ViewController,但是如果出现警报,上面的代码会给出 UIAlertController。如何在 UIAlertController 下获取顶视图控制器? 检查以下方法,查看导航堆栈中的第二项。 self.navigationController?.viewControllers 谢谢苏宾。但这也行不通。您能否以我的代码为例提供更多信息 谢谢苏宾。我想找到最上面的 ViewController,但是如果出现警报,上面的代码会给出 UIAlertController。如何在 UIAlertController 下获取顶视图控制器? 它对我有用。你如何呈现警报?你使用的是 UIAlertView 还是 UIAlertController ?

以上是关于在 UIAlertController 下获取最顶层的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 UIAlertController 的框架宽度?

如何在Objective C中通过UIView获取UIAlertController?

使用 StoreKit 时获取 Apple UIAlertController 完成

Swift 之自定义 UIAlertController

Swift 如何获取 UIAlertController 标题高度

我们如何在没有用户输入的情况下创建和关闭 UIAlertController? (迅速)