首页 > 解决方案 > 如何在任何地方获取当前显示的控制器

问题描述

我需要在任何地方获取当前显示的控制器,但是所有信息都指向以下方法

// 获取当前显示的Controller
+ (UIViewController *)currentViewController {
    // Find best view controller
    UIViewController* viewController = [UIApplication sharedApplication].keyWindow.rootViewController;
    return [self findBestViewController:viewController];
}

+ (UIViewController*)findBestViewController:(UIViewController*)vc {
    if (vc.presentedViewController) {
        return [self findBestViewController:vc.presentedViewController];
    } else if ([vc isKindOfClass:[UISplitViewController class]]) {
        UISplitViewController* svc = (UISplitViewController*) vc;
        if (svc.viewControllers.count > 0)
        return [self findBestViewController:svc.viewControllers.lastObject];
        else
        return vc;
    } else if ([vc isKindOfClass:[UINavigationController class]]) {
        UINavigationController* svc = (UINavigationController*) vc;
        if (svc.viewControllers.count > 0)
        return [self findBestViewController:svc.topViewController];
        else
        return vc;
    } else if ([vc isKindOfClass:[UITabBarController class]]) {
        UITabBarController* svc = (UITabBarController*) vc;
        if (svc.viewControllers.count > 0)
        return [self findBestViewController:svc.selectedViewController];
        else
        return vc;
    } else {
        return vc;
    }
}

得到的控制器跳转是没有问题的,比如push和present。但是如果我需要知道当前显示的控制器的类,如果当前控制器包含子控制器,我无法知道当前显示的是哪一个,导致我的page和popup对应的需求无法实现

标签: iosobjective-cswiftuiviewcontrollerpopupwindow

解决方案


推荐阅读