在iOS开发过程中,我们可能需要获取到屏幕最上层的ViewController
思路
从最底层的ViewController一层一层往上找
也就是从[UIApplication sharedApplication].keyWindow.rootViewController
开始寻找
实现
+ (UIViewController *)topViewController {
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
return [self topVisibleViewControllerOfViewControlller:rootViewController];
}
+ (UIViewController *)topVisibleViewControllerOfViewControlller:(UIViewController *)vc {
if ([vc isKindOfClass:[UITabBarController class]]) {
UITabBarController *tabBarController = (UITabBarController *)vc;
return [self topVisibleViewControllerOfViewControlller:tabBarController.selectedViewController];
} else if ([vc isKindOfClass:[UINavigationController class]]) {
UINavigationController *navigationController = (UINavigationController *)vc;
return [self topVisibleViewControllerOfViewControlller:navigationController.visibleViewController];
} else if (vc.presentedViewController) {
return [self topVisibleViewControllerOfViewControlller:vc.presentedViewController];
} else if (vc.childViewControllers.count > 0){
return [self topVisibleViewControllerOfViewControlller:vc.childViewControllers.lastObject];
}
return vc;
}
网友评论