美文网首页
ios currentViewController

ios currentViewController

作者: osnail | 来源:发表于2020-12-18 15:43 被阅读0次
    + (UINavigationController*)currentNavigationViewController {
        
        UIViewController* currentViewController = [self currentViewController];
        return currentViewController.navigationController;
    }
    
    + (UIViewController *)currentViewController {
        UIViewController *result = nil;
            UIWindow * window = [[UIApplication sharedApplication] keyWindow];
            if (window.windowLevel != UIWindowLevelNormal)
            {
                NSArray *windows = [[UIApplication sharedApplication] windows];
                for(UIWindow * tmpWin in windows)
                {
                    if (tmpWin.windowLevel == UIWindowLevelNormal)
                    {
                        window = tmpWin;
                        break;
                    }
                }
            }
            UIView *frontView = [[window subviews] objectAtIndex:0];
            id nextResponder = [frontView nextResponder];
            
            if ([nextResponder isKindOfClass:[UIViewController class]])
                result = nextResponder;
            else
                result = window.rootViewController;
            
        return [self currentViewControllerFrom:result];
    }
    
    + (UIViewController*)currentViewControllerFrom:(UIViewController*)viewController {
        
        if ([viewController isKindOfClass:[UINavigationController class]]) {
            
            UINavigationController* navigationController = (UINavigationController *)viewController;
            return [self currentViewControllerFrom:navigationController.viewControllers.lastObject];
            
        } else if([viewController isKindOfClass:[UITabBarController class]]) {
            
            UITabBarController* tabBarController = (UITabBarController *)viewController;
            return [self currentViewControllerFrom:tabBarController.selectedViewController];
            
        } else if(viewController.presentedViewController != nil) {
            
            return [self currentViewControllerFrom:viewController.presentedViewController];
            
        } else {
            
            return viewController;
            
        }
    }
    

    相关文章

      网友评论

          本文标题:ios currentViewController

          本文链接:https://www.haomeiwen.com/subject/aptfnktx.html