iOS开发 - 获取当前View最顶层的ViewController

Posted wanglixin1999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发 - 获取当前View最顶层的ViewController相关的知识,希望对你有一定的参考价值。

前言

ios中开放中,我们可能会遇到需要通过代码获取当前显示在屏幕最顶层的ViewController,比如我们需要在最顶层的ViewController上展示一个UIAlertController或者“吐司”的时候。本文将介绍如何获取最顶层的ViewController。

实现思路

通过最底层的ViewController依次向上寻找,直到找到最顶层的ViewController,也就是从UIApplication的keyWindow的rootViewController开始寻找(如果有多个UIWindow则要考虑UIWindow的选择问题。在寻找的过程中,要分别考虑当前ViewController是UITabBarController和UINavigationController的情况,同时还要考虑到当前ViewController是否通过presentViewController:animated:completion:模态展示了其他ViewController。

实现方法

- (UIViewController *)topViewController
    UIViewController *resultVC;
    resultVC = [self _topViewController:[[UIApplication sharedApplication].keyWindow rootViewController]];
    while (resultVC.presentedViewController)
        resultVC = [self _topViewController:resultVC.presentedViewController];
   
    return resultVC;


- (UIViewController *)_topViewController:(UIViewController *)vc
    if ([vc isKindOfClass:[UINavigationController class]])
        return [self _topViewController:[(UINavigationController *)vc topViewController]];
    else if ([vc isKindOfClass:[UITabBarController class]])
        return [self _topViewController:[(UITabBarController *)vc selectedViewController]];
    else
        return vc;
   
    return nil;

使用方法

UIViewController *topVC = [self topViewController];

以上是关于iOS开发 - 获取当前View最顶层的ViewController的主要内容,如果未能解决你的问题,请参考以下文章

ios 如何使一个view在uiwindow最顶层

iOS 获取当前顶层的ViewController

swift 在应用程序的任何位置获取最顶层的viewController(通常来自appDelegate)。获取当前可见的viewController。

如何在iOS上找到最顶层的视图控制器

同时切换 Tabs 和重置 Nav 的 View Controllers - Swift iOS

qt 事件到达最顶层怎么处理