iOS 获取当前正在显示的ViewController

来源:互联网 发布:阿里云如何注销 编辑:程序博客网 时间:2024/06/06 12:50

适用范围,tabbar的子视图都是NavigationController,其它情况可以根据情况调整.

- (UIViewController *)getCurrentVC{        UIViewController *result = nil;    UIWindow * window = [[UIApplication sharedApplication] keyWindow];    //app默认windowLevel是UIWindowLevelNormal,如果不是,找到UIWindowLevelNormal的    if (window.windowLevel != UIWindowLevelNormal)    {        NSArray *windows = [[UIApplication sharedApplication] windows];        for(UIWindow * tmpWin in windows)        {            if (tmpWin.windowLevel == UIWindowLevelNormal)            {                window = tmpWin;                break;            }        }    }    id  nextResponder = nil;    UIViewController *appRootVC=window.rootViewController;//    如果是present上来的appRootVC.presentedViewController 不为nil    if (appRootVC.presentedViewController) {        nextResponder = appRootVC.presentedViewController;    }else{        UIView *frontView = [[window subviews] objectAtIndex:0];        nextResponder = [frontView nextResponder];   <span style="font-family: Arial, Helvetica, sans-serif;">//  这方法下面有详解    </span>    }        if ([nextResponder isKindOfClass:[UITabBarController class]]){        UITabBarController * tabbar = (UITabBarController *)nextResponder;        UINavigationController * nav = (UINavigationController *)tabbar.viewControllers[tabbar.selectedIndex];//        UINavigationController * nav = tabbar.selectedViewController ; 上下两种写法都行        result=nav.childViewControllers.lastObject;            }else if ([nextResponder isKindOfClass:[UINavigationController class]]){        UIViewController * nav = (UIViewController *)nextResponder;        result = nav.childViewControllers.lastObject;    }else{        result = nextResponder;    }        return result;}


0 0
原创粉丝点击