iOS 获取当前正在显示的ViewController

非视图类中想要随时展示一个view时,可以直接声明一个view,然后只需要将被展示的view加到当前view的子视图,或者想把一个view随时加到一个viewcontroller时,这样就需要获得当前屏幕的这个viewcontroller了,这个方法在网上找到了,自己用了的确可以用

//获取当前屏幕显示的viewcontroller
- (UIViewController *)getCurrentVC
{
    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;
            }
        }
    }
    if ([window subviews].count>0) {
        UIView *frontView = [[window subviews] objectAtIndex:0];
        id nextResponder = [frontView nextResponder];
        
        if ([nextResponder isKindOfClass:[UIViewController class]]){
                result = nextResponder;
        }
        else{
            result = window.rootViewController;
        }
    }
    else{
        result = window.rootViewController;
    }
    if ([result isKindOfClass:[UITabBarController class]]) {
        result = [((UITabBarController*)result) selectedViewController];
    }
    if ([result isKindOfClass:[UINavigationController class]]) {
        result = [((UINavigationController*)result) visibleViewController];
    }
    
    return result;
}

然后在想使用的地方,直接就可以调用这个函数,然后加上了,比如说现在声明的那个view里面写了这个,当想加上去的时候可以直接这样

[[self getCurrentVC].view addSubview:self]
Last modification:December 15th, 2017 at 03:53 pm
如果看了这个文章可以让你少加会班,可以请我喝杯可乐
已打赏名单
微信公众号

2 comments

  1. 王永康

    这个获得是当前显示的Tab控制器,并不能具体到N层之后的具体ViewController

    1. Damon胡东东
      @王永康

      受教了,之前用这个是为了随时在当前界面显示一个东西用的

Leave a Comment