iOS开发 - 获取当前View最顶层的ViewController
2016-12-08 15:03
901 查看
前言
在iOS中开放中,我们可能会遇到需要通过代码获取当前显示在屏幕最顶层的ViewController,比如我们需要在最顶层的ViewController上展示一个UIAlertController或者“吐司”的时候。本文将介绍如何获取最顶层的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 *topVC = [self topViewController];相关文章推荐
- iOS开发 获取当前视图最顶层的ViewController
- 【iOS开发】获取当前view(视图)所在的Controller(控制器)
- iOS开发 获取当前正在显示的ViewController(包含Push的和presented的)
- iOS 获取当前最顶层的ViewController
- cocos2dx 在ios下获取当前ViewController
- 获取当前最顶层的ViewController
- ios开发 判断当前ViewController是push还是present的方式显示的
- ios开发之-- tableview/collectionview获取当前点击的cell
- [iOS 获取当前窗口导航控制器中栈顶viewController] 不普遍适用
- 获取iOS应用中当前处于Activity状态的ViewController
- 获取iOS应用中当前处于Activity状态的ViewController
- 获取iOS应用中当前处于Activity状态的ViewController
- IOS获取顶层的viewcontroller
- iOS 获取当前正在显示的ViewController
- iOS 获取当前正在显示的ViewController或者当前的PresentedViewController
- iOS 利用visibleViewController和topViewController获取当前显示的页面区别
- iOS 获取当前的ViewController的方法
- iOS 获取当前最上层ViewController
- iOS之获取当前view的控制器、当前应用的tabbarController、navigationController中指定viewController
- iOS 获取当前的ViewController