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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM