我们在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 *topmostVC = [self topViewController];
以上就是对于如何用代码获取当前最顶层的ViewController的简述,更多有关iOS方面的内容,请继续关注拓胜科技iOS技术资讯频道,或者有关iOS培训方面的疑问也可以在线咨询拓胜网络客服。