程序员

iOS 获取当前VC

2020-06-14  本文已影响0人  陈不同

更新到13.5后,发现获取当前vc时,获取到的竟然是window。

以下是两种解决方案:

第一种:

UIWindow * window = [[UIApplication sharedApplication] keyWindow];

    if(window.windowLevel != UIWindowLevelNormal) {

        NSArray *windows = [[UIApplication sharedApplication] windows];

        for(UIWindow * tmpWininwindows) {

            if(tmpWin.windowLevel == UIWindowLevelNormal) {

                window = tmpWin;

                break;

            }

        }

    }

//从根控制器开始查找

    UIViewController *rootVC = window.rootViewController;

    UIViewController *activityVC =nil;

while (true) {

        if([rootVC isKindOfClass:[UINavigationController class]]) {

            activityVC = [(UINavigationController *)rootVC visibleViewController];

        }elseif([rootVC isKindOfClass:[UITabBarController class]]) {

            activityVC = [(UITabBarController *)rootVC selectedViewController];

        }elseif(rootVC.presentedViewController) {

            activityVC = rootVC.presentedViewController;

        }else{

            break;

        }

        rootVC = activityVC;

    }

    return rootVC;

第二种:

UIViewController *result =nil;

    UIWindow * window = [[UIApplication sharedApplication] keyWindow];

    if(window.windowLevel != UIWindowLevelNormal) {

        NSArray *windows = [[UIApplication sharedApplication] windows];

        for(UIWindow * tmpWininwindows) {

            if(tmpWin.windowLevel == UIWindowLevelNormal) {

                window = tmpWin;

                break;

            }

        }

    }

//从根控制器开始查找

    UIViewController *rootVC = window.rootViewController;

idnextResponder = [rootVC.view nextResponder];

    NSLog(@"nextResponder---%@",nextResponder);

    if([nextResponder isKindOfClass:[UINavigationController class]]) {

        result = ((UINavigationController*)nextResponder).topViewController;

        if([result isKindOfClass:[UITabBarController class]]) {

            result = ((UITabBarController *)result).selectedViewController;

        }

    }elseif([nextResponder isKindOfClass:[UITabBarController class]]) {

        result = ((UITabBarController*)nextResponder).selectedViewController;

        if([result isKindOfClass:[UINavigationController class]]) {

            result = ((UINavigationController *)result).topViewController;

        }

    }elseif([nextResponder isKindOfClass:[UIViewController class]]) {

        result = nextResponder;

    }else{

        result = window.rootViewController;

        if([result isKindOfClass:[UINavigationController class]]) {

            result = ((UINavigationController *)result).topViewController;

            if([result isKindOfClass:[UITabBarController class]]) {

                result = ((UITabBarController *)result).selectedViewController;

            }

        }elseif([result isKindOfClass:[UIViewController class]]) {

            result = nextResponder;

        }

    }

return  result;

推荐第二种。

上一篇下一篇

猜你喜欢

热点阅读