获取当前的激活的 viewController

/** 获取当前的视图控制器 */
+ (DYNavigationController *)getCurrentVC
{
    UIViewController *result = nil;

    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    if (window.windowLevel != UIWindowLevelNormal)
    {
        NSArray *windows = [[UIApplication sharedApplication] windows];
        for(UIWindow * tmpWin in windows)
        {
            if (tmpWin.windowLevel == UIWindowLevelNormal)
            {
                window = tmpWin;
                break;
            }
        }
    }

    UIView *frontView = window.subviews.firstObject;//[[window subviews] objectAtIndex:0];
    if (!frontView) {
        return nil;
    }
    id nextResponder = [frontView nextResponder];

    if ([nextResponder isKindOfClass:[UIViewController class]])
        result = nextResponder;
    else
        result = window.rootViewController;

    if ([result isKindOfClass:[DYTabBarViewController class]]) {
        DYNavigationController * currentVC =  (DYNavigationController * )[(DYTabBarViewController *) result selectedViewController];
        return currentVC;
    }

    return nil;
}

+ (UIViewController *)visibleViewController {
    UIViewController *rootViewController =[[[[UIApplication sharedApplication] delegate] window] rootViewController];
    return [ControllerTool getVisibleViewControllerFrom:rootViewController];
}

+ (UIViewController *)getVisibleViewControllerFrom:(UIViewController *) vc {
    if ([vc isKindOfClass:[DYNavigationController class]]) {
        return [ControllerTool getVisibleViewControllerFrom:[((UINavigationController *) vc) visibleViewController]];
    } else if ([vc isKindOfClass:[DYTabBarViewController class]]) {
        return [ControllerTool getVisibleViewControllerFrom:[((UITabBarController *) vc) selectedViewController]];
    } else {
        if (vc.presentedViewController) {
            return [ControllerTool getVisibleViewControllerFrom:vc.presentedViewController];
        } else {
            return vc;
        }
    }
}

+ (UIViewController *)getTabbarVisableControllerWithClassName:(NSString *)className
{
    UIViewController *result = nil;

    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    if (window.windowLevel != UIWindowLevelNormal)
    {
        NSArray *windows = [[UIApplication sharedApplication] windows];
        for(UIWindow * tmpWin in windows)
        {
            if (tmpWin.windowLevel == UIWindowLevelNormal)
            {
                window = tmpWin;
                break;
            }
        }
    }

    UIView *frontView = [[window subviews] objectAtIndex:0];
    id nextResponder = [frontView nextResponder];

    if ([nextResponder isKindOfClass:[UIViewController class]])
        result = nextResponder;
    else
        result = window.rootViewController;


    NSArray *array = ((DYTabBarViewController *)result).viewControllers;

    for (DYNavigationController *controller in array) {
        if ([controller.visibleViewController isKindOfClass:NSClassFromString(className)]) {
            return controller.visibleViewController;
        }
    }

    return nil;
}

猜你喜欢

转载自blog.csdn.net/qq_27074387/article/details/80494394