获取当前所在viewController适用于后台进入前台情况
#pragma mark - 得到当前所在viewController
-(UIViewController *)currentViewController
{
UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
// modal展现方式的底层视图不同
// 取到第一层时,取到的是UITransitionView,通过这个view拿不到控制器
UIView *firstView = [keyWindow.subviews firstObject];
UIView *secondView = [firstView.subviews firstObject];
UIViewController *vc = [self getCurrentViewControllerByView:secondView];
if ([vc isKindOfClass:[UITabBarController class]]) {
UITabBarController *tab = (UITabBarController *)vc;
if ([tab.selectedViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController *nav = (UINavigationController *)tab.selectedViewController;
return [nav.viewControllers lastObject];
} else {
return tab.selectedViewController;
}
} else if ([vc isKindOfClass:[UINavigationController class]]) {
UINavigationController *nav = (UINavigationController *)vc;
return [nav.viewControllers lastObject];
} else if([vc isKindOfClass:[MMDrawerController class]]){
MMDrawerController *mmDrawer = (MMDrawerController*)vc;
if ([mmDrawer.centerViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController *navC = (UINavigationController *)mmDrawer.centerViewController;
return [navC.viewControllers lastObject];
}else {
UITabBarController *tabBar = (UITabBarController*)mmDrawer.centerViewController;
UINavigationController *navC = (UINavigationController *)tabBar.selectedViewController;
return [navC.viewControllers lastObject];
}
}else{
return vc;
}
return nil;
}
#pragma mark - 根据view得到当前viewController
-(UIViewController *)getCurrentViewControllerByView:(UIView*)view{
UIResponder *next = [view nextResponder];
do {
if ([next isKindOfClass:[UIViewController class]]) {
return (UIViewController *)next;
}
next = [next nextResponder];
} while (next != nil);
return nil;
}