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

来源:互联网 发布:java开发平台结构图 编辑:程序博客网 时间:2024/05/18 00:48

前言

在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;}

1 0
原创粉丝点击