在iOS开发中,我们经常性会需要获取当前页面的ViewController,也就是我们常说最顶层的ViewController或正在展示的ViewController,然后需要最顶层的ViewController进行一些操作。
例如在最顶层的ViewController上展示一个UIAlertController,或者在最顶层的ViewController上present或push另一个ViewController,以及进行其他的一些操作。
方法一:
- (UIViewController *)topViewController {
//第一步:获取根视图
UIViewController *resultVC = [self _topViewController:[[UIApplication sharedApplication].keyWindow rootViewController]];
//第二步:从根视图一直向上寻找顶层视图
//注:A控制器跳转到B控制器,A.presentedViewController = B
while (resultVC.presentedViewController) {
//判断控制器的类型
resultVC = [self getTopViewController:resultVC.presentedViewController];
}
return resultVC;
}
- (UIViewController *)getTopViewController:(UIViewController *)vc {
if ([vc isKindOfClass:[UINavigationController class]]) {
// 类型为导航栏控制器,返回栈顶控制