您的位置:首页 > 移动开发 > IOS开发

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

2016-12-08 15:03 901 查看

前言

在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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: