获取当前控制器 getCurrentViewController

匿名 (未验证) 提交于 2019-12-02 23:03:14

项目中经常需要拿到当前的视图控制器,但是每个项目结构不同,每次都要针对某个项目去写一个获取当前控制器的方法,感觉很不爽,今天终于抽时间搞了一套通用的方法。分享给大家,如果有不对的地方,望大神指正。

实现:

 #define kAppDelegate            [UIApplication sharedApplication].delegate   #pragma mark   - 获取当前控制器 /**  获取当前控制器*/ + (UIViewController *)currentViewController{      if ([kAppDelegate.window.rootViewController isKindOfClass:UINavigationController.class] || [kAppDelegate.window.rootViewController isKindOfClass:UITabBarController.class]) {         return [self getVisibleViewControllerWithRootVC:kAppDelegate.window.rootViewController];     }else{         UIViewController *VC = kAppDelegate.window.rootViewController;         if (VC.presentedViewController) {             if ([VC.presentedViewController isKindOfClass:UINavigationController.class]||                 [VC.presentedViewController isKindOfClass:UITabBarController.class]) {                 return [self getVisibleViewControllerWithRootVC:VC.presentedViewController];             }else{                 return VC.presentedViewController;             }         }         else{             return VC;         }     } }  /**  * 私有方法  * rootVC必须是UINavigationController 或 UITabBarController 及其子类  */ + (UIViewController *)getVisibleViewControllerWithRootVC:(UIViewController *)rootVC{      if ([rootVC isKindOfClass:UINavigationController.class]) {         UINavigationController *nav = (UINavigationController *)rootVC;         // 如果有modal view controller并且弹起的是导航控制器,返回其topViewController         if ([nav.visibleViewController isKindOfClass:UINavigationController.class]) {             UINavigationController *presentdNav = (UINavigationController *)nav.visibleViewController;             return presentdNav.visibleViewController;         }         else if ([nav.visibleViewController isKindOfClass:UITabBarController.class]){             return [self getVisibleViewControllerWithRootVC:nav.visibleViewController];         }         // Return modal view controller if it exists. Otherwise the top view controller.         else{             return nav.visibleViewController;         }     }     else if([rootVC isKindOfClass:UITabBarController.class]){         UITabBarController *tabVC = (UITabBarController *)rootVC;         UINavigationController *nav = (UINavigationController *)tabVC.selectedViewController;         return [self getVisibleViewControllerWithRootVC:nav];     }else{         return rootVC;     } }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!