美文网首页
获取当前最顶层的ViewController

获取当前最顶层的ViewController

作者: SuperZico | 来源:发表于2016-10-13 17:26 被阅读74次

    最近学会了一个小小的黑科技,用于获取当前最顶层的ViewController
    原理是通过最底层的ViewController依次向上寻找,直到找到最顶层的ViewController,也就是从UIApplication的keyWindow的rootViewController开始寻找(如果有多个UIWindow则要考虑UIWindow的选择问题)

    在寻找的过程中,要分别考虑当前ViewController是UITabBarController和UINavigationController的情况,同时还要考虑到当前ViewController是否通过 presentViewController:animated:completion: 模态展示了其他ViewController。

    代码如下

    - (UIViewController *)topViewController { 
      UIViewController *resultVC;
      resultVC = [self _topViewController:[[UIApplication sharedApplication].keyWindow rootViewController]]; 
      while (resultVC.presentedViewController) { 
        resultVC = [self _topViewController:resultVC.presentedViewController]; 
      }
       return resultVC;
    }
    
    - (UIViewController *)_topViewController:(UIViewController *)vc { 
      if ([vc isKindOfClass:[UINavigationController class]]) { 
        return [self _topViewController:[(UINavigationController *)vc topViewController]]; 
      }else if ([vc isKindOfClass:[UITabBarController class]]) {
         return [self _topViewController:[(UITabBarController *)vc selectedViewController]]; 
      } else {
         return vc;
      }
     return nil;
    }
    

    使用方法

    UIViewController *topmostVC = [self topViewController];
    

    相关文章

      网友评论

          本文标题:获取当前最顶层的ViewController

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