美文网首页
iOS获取当前显示页面

iOS获取当前显示页面

作者: Fisher123 | 来源:发表于2018-03-21 18:22 被阅读1612次
    UINavigationController 中有visibleViewController和topViewController
    visibleViewController 当前显示的控制器
    topViewController 是某个导航栈的栈顶视图
    visibleViewController跟导航栈没有关系,只是当前显示的控制器,也就是说任意一个导航的visibleViewController所返回的值应该是一样的,
    topViewController 是某个导航栈的栈顶视图,和导航控制器相关
    换句话说如果在仅有一个导航栈上,visibleViewController和topViewController应该是没有区别的。
    

    方法一 : 获取当前显示的控制器 UIWindow (Visible)

    - (UIViewController *)visibleViewController {
        UIViewController *rootViewController =[[[[UIApplication sharedApplication] delegate] window] rootViewController];
        return [UIWindow getVisibleViewControllerFrom:rootViewController];
    }
    
    + (UIViewController *)getVisibleViewControllerFrom:(UIViewController *)vc {
        if ([vc isKindOfClass:[UINavigationController class]]) {
            return [UIWindow getVisibleViewControllerFrom:[((UINavigationController *) vc) visibleViewController]];
        } else if ([vc isKindOfClass:[UITabBarController class]]) {
            return [UIWindow getVisibleViewControllerFrom:[((UITabBarController *) vc) selectedViewController]];
        } else {
            if (vc.presentedViewController) {
                return [UIWindow getVisibleViewControllerFrom:vc.presentedViewController];
            } else {
                return vc;
            }
        }
    }
    
    

    方法二 :

    - (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController {
        if ([rootViewController isKindOfClass:[UITabBarController class]]) {
            UITabBarController* tabBarController = (UITabBarController*)rootViewController;
            return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];
        } else if ([rootViewController isKindOfClass:[UINavigationController class]]) {
            UINavigationController* navigationController = (UINavigationController*)rootViewController;
            return [self topViewControllerWithRootViewController:navigationController.visibleViewController];
        } else if (rootViewController.presentedViewController) {
            UIViewController* presentedViewController = rootViewController.presentedViewController;
            return [self topViewControllerWithRootViewController:presentedViewController];
        } else {
            return rootViewController;
        }
    }
    

    相关文章

      网友评论

          本文标题:iOS获取当前显示页面

          本文链接:https://www.haomeiwen.com/subject/upqnqftx.html