美文网首页
iOS 获取当前呈现的ViewController

iOS 获取当前呈现的ViewController

作者: 无奈iOSer | 来源:发表于2017-03-10 16:10 被阅读19次
    /**
    
    * 获取当前呈现的ViewController
    
    */
    
    + (UIViewController *)getCurrentViewController {
    
    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] firstObject];
    
    UIResponder *nextResponder = [frontView nextResponder];
    
    if ([nextResponder isKindOfClass:[UIViewController class]])
    
    result = (UIViewController *)nextResponder;
    
    else
    
    result = window.rootViewController;
    
    if ([result isKindOfClass:[UITabBarController class]]) {
    
    UITabBarController *tab = (UITabBarController *)result;
    
    if ([tab.selectedViewController isKindOfClass:[UINavigationController class]]) {
    
    UINavigationController *nav = (UINavigationController *)tab.selectedViewController;
    
    return [nav.viewControllers lastObject];
    
    } else {
    
    return tab.selectedViewController;
    
    }
    
    } else if ([result isKindOfClass:[UINavigationController class]]) {
    
    UINavigationController *nav = (UINavigationController *)result;
    
    return [nav.viewControllers lastObject];
    
    } else {
    
    return result;
    
    }
    
    }
    

    相关文章

      网友评论

          本文标题:iOS 获取当前呈现的ViewController

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