// // RQControllerHelper.m // RQCommon // // Created by 张嵘 on 2018/11/23. // Copyright © 2018 张嵘. All rights reserved. // 管理视图控制器的工具类 #import "RQControllerHelper.h" #import "RQMainTabBarViewController.h" @implementation RQControllerHelper + (UIViewController *)currentViewController { UIViewController *resultVC; resultVC = [self _topViewController:[[UIApplication sharedApplication].keyWindow rootViewController]]; /// RQ Fixed : 这里必须要判断一下,否则取出来永远都是 RQMainTabBarViewController。这是架构上小缺(特)陷(性)。因为RQMainTabBarViewController的子控制器是UITabBarController,所以需要递归UITabBarController的所有的子控制器 if ([resultVC isKindOfClass:[RQMainTabBarViewController class]]) { RQMainTabBarViewController *mainVc = (RQMainTabBarViewController *)resultVC; resultVC = [self _topViewController:mainVc.tabBarController]; } while (resultVC.presentedViewController) { resultVC = [self _topViewController:resultVC.presentedViewController]; } return resultVC; } + (UIViewController *)_topViewController:(UIViewController *)vc { if ([vc isKindOfClass:[UINavigationController class]]) { return [self _topViewController:[(UINavigationController *)vc topViewController]]; } else if ([vc isKindOfClass:[UITabBarController class]]) { return [self _topViewController:[(UITabBarController *)vc selectedViewController]]; } else { return vc; } } + (UINavigationController *)topNavigationController{ return RQSharedAppDelegate.navigationControllerStack.topNavigationController; } + (RQBaseViewController *)topViewController { RQBaseViewController *topViewController = (RQBaseViewController *)[self topNavigationController].topViewController; /// 确保解析出来的类 也是 RQBaseViewController NSAssert([topViewController isKindOfClass:RQBaseViewController.class], @"topViewController is not an RQBaseViewController's subclass: %@", topViewController); return topViewController; } @end