iOS开发 - 获取当前View最顶层的ViewController
Posted wanglixin1999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发 - 获取当前View最顶层的ViewController相关的知识,希望对你有一定的参考价值。
前言
在ios中开放中,我们可能会遇到需要通过代码获取当前显示在屏幕最顶层的ViewController,比如我们需要在最顶层的ViewController上展示一个UIAlertController或者“吐司”的时候。本文将介绍如何获取最顶层的ViewController。实现思路
通过最底层的ViewController依次向上寻找,直到找到最顶层的ViewController,也就是从UIApplication的keyWindow的rootViewController开始寻找(如果有多个UIWindow则要考虑UIWindow的选择问题。在寻找的过程中,要分别考虑当前ViewController是UITabBarController和UINavigationController的情况,同时还要考虑到当前ViewController是否通过presentViewController:animated:completion:模态展示了其他ViewController。实现方法
- (UIViewController *)topViewControllerUIViewController *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 *topVC = [self topViewController];以上是关于iOS开发 - 获取当前View最顶层的ViewController的主要内容,如果未能解决你的问题,请参考以下文章
swift 在应用程序的任何位置获取最顶层的viewController(通常来自appDelegate)。获取当前可见的viewController。