获取app的根视图控制器和最上层控制器
/*
获取应用的根视图控制器
*/
+ (UIViewController *)applicationRootViewController {
UIWindow* window = [[[UIApplication sharedApplication] delegate] window];
NSAssert(window, @"The window is empty");
return window.rootViewController;
}
/*
获取应用最上层的控制器。
注意:此方法内部没有对childViewController做处理,返回的控制器可能包含childViewController。
*/
+ (UIViewController *)applicationTopViewController {
UIViewController* currentViewController = [self applicationRootViewController];
while (currentViewController) {
if (currentViewController.presentedViewController) {
currentViewController = currentViewController.presentedViewController;
} else if ([currentViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController* navigationController = (UINavigationController* )currentViewController;
currentViewController = [navigationController.childViewControllers lastObject];
} else if ([currentViewController isKindOfClass:[UITabBarController class]]) {
UITabBarController* tabBarController = (UITabBarController* )currentViewController;
currentViewController = tabBarController.selectedViewController;
} else {
// 可能会存在childViewController, 由外部处理。
return currentViewController;
}
}
return currentViewController;
}