16.获取当前主窗口的控制器

在 UITabBarController 和 UINavigationController 的一般组合下, 获取当前的UIViewController。不同的情况下,根据结构不同, 查找的方式随之灵活变动。

//获取当前主窗口的视图控制器
- (UIViewController *)currentViewController
{
    UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;
    if ([vc isKindOfClass:[UITabBarController class]]) {
        UITabBarController *tab = (UITabBarController *)vc;
        if ([tab.selectedViewController isKindOfClass:[UINavigationController class]]) {            UINavigationController *nav = (UINavigationController *)tab.selectedViewController;
            return [nav.viewControllers lastObject];
        } else {
            return tab.selectedViewController;
        }
    } else if ([vc isKindOfClass:[UINavigationController class]]) {
        UINavigationController *nav = (UINavigationController *)vc;
        return [nav.viewControllers lastObject];
    } else {
        return vc;
    }
    NSLog(@"没有找到该视图控制器");
    return nil;
}

你可能感兴趣的:(获取当前控制器)