zoukankan      html  css  js  c++  java
  • iOS获取当前屏幕显示的viewcontroller

      我们在非视图类中想要随时展示一个view时,需要将被展示的view加到当前view的子视图,或用当前view presentViewController,或pushViewContrller,这些操作都需要获取当前正在显示的ViewController。

    #pragma mark 获取当前屏幕显示的viewcontroller
    - (UIViewController *)getCurrentVC
    {
        // 定义一个变量存放当前屏幕显示的viewcontroller
        UIViewController *result = nil;
        
        // 得到当前应用程序的关键窗口(正在活跃的窗口)
        UIWindow * window = [[UIApplication sharedApplication] keyWindow];
        
        // windowLevel是在 Z轴 方向上的窗口位置,默认值为UIWindowLevelNormal
        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];
        
        // 获取视图的下一个响应者,UIView视图调用这个方法的返回值为UIViewController或它的父视图
        id nextResponder = [frontView nextResponder];
        
        // 判断显示视图的下一个响应者是否为一个UIViewController的类对象
        if ([nextResponder isKindOfClass:[UIViewController class]]) {
            result = nextResponder;
        } else {
            result = window.rootViewController;
        }
        return result;
    }
  • 相关阅读:
    vue-router的基本使用
    SQL Server加密存储过程的破解
    IIS绑定Active Directory账号自动登录网站的方法
    .Net Install类的Install、Commit等事件触发顺序
    正态分布公式
    HDU4417 Super Mario
    CodeChef
    Gym101630C Connections
    CF916C
    CF912D Fishes
  • 原文地址:https://www.cnblogs.com/soley/p/5510223.html
Copyright © 2011-2022 走看看