iOS 获取当前VC

更新到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;


推荐第二种。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。