当我们在其他地方想要弹出一个UIAlertController的时候就需要获取最上层的控制器,网上有很多写法,但是我感觉要么是很乱,要么是获取的不准确,现自己写的如下,如有不当之处还请指出。
//获取当前最上层的控制器
+ (UIViewController *)getTopMostController {
UIViewController *topVC = [UIApplication sharedApplication].keyWindow.rootViewController;
//循环之前tempVC和topVC是一样的
UIViewController *tempVC = topVC;
while (1) {
if ([topVC isKindOfClass:[UITabBarController class]]) {
topVC = ((UITabBarController*)topVC).selectedViewController;
}
if ([topVC isKindOfClass:[UINavigationController class]]) {
topVC = ((UINavigationController*)topVC).visibleViewController;
}
if (topVC.presentedViewController) {
topVC = topVC.presentedViewController;
}
//如果两者一样,说明循环结束了
if ([tempVC isEqual:topVC]) {
break;
} else {
//如果两者不一样,继续循环
tempVC = topVC;
}
}
return topVC;
}