zoukankan      html  css  js  c++  java
  • IOS获取当前所在的ViewController

    这个主要用于给别人提供的API中,有关跳转的地方。在IOS中,跳转必须提供目前所在的ViewController。代码如下:

    // 获取当前显示的 UIViewController
    + (UIViewController *)dc_findCurrentShowingViewController {
        //获得当前活动窗口的根视图
        UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;
        UIViewController *currentShowingVC = [self findCurrentShowingViewControllerFrom:vc];
        return currentShowingVC;
    }
    + (UIViewController *)findCurrentShowingViewControllerFrom:(UIViewController *)vc
    {
        // 递归方法 Recursive method
        UIViewController *currentShowingVC;
        if ([vc presentedViewController]) {
            // 当前视图是被presented出来的
            UIViewController *nextRootVC = [vc presentedViewController];
            currentShowingVC = [self findCurrentShowingViewControllerFrom:nextRootVC];
    
        } else if ([vc isKindOfClass:[UITabBarController class]]) {
            // 根视图为UITabBarController
            UIViewController *nextRootVC = [(UITabBarController *)vc selectedViewController];
            currentShowingVC = [self findCurrentShowingViewControllerFrom:nextRootVC];
    
        } else if ([vc isKindOfClass:[UINavigationController class]]){
            // 根视图为UINavigationController
            UIViewController *nextRootVC = [(UINavigationController *)vc visibleViewController];
            currentShowingVC = [self findCurrentShowingViewControllerFrom:nextRootVC];
    
        } else {
            // 根视图为非导航类
            currentShowingVC = vc;
        }
    
        return currentShowingVC;
    }
    

      

  • 相关阅读:
    如何让dapper支持oracle游标呢?
    使用Polly让程序有Retry的机制
    js代码优化
    学习simple.data之基础篇
    如何在.net4.0中使用.net4.5的async/await
    异步导出excel
    让人蛋疼的“Oracle.DataAccess.dll”
    关于函数和方法总结
    linux和windows的区别
    01-linux软件包管理器安装和编译安装
  • 原文地址:https://www.cnblogs.com/howlaa/p/13627116.html
Copyright © 2011-2022 走看看