1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- //
- // 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
|