iOS-获取最上层控制器

当我们在其他地方想要弹出一个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;
}

你可能感兴趣的:(iOS-获取最上层控制器)