как получить отображаемый контроллер в любом месте - PullRequest
0 голосов
/ 14 марта 2020

Мне нужно получить отображаемый в настоящий момент контроллер в любом месте, но вся информация указывает на следующий метод

// 获取当前显示的Controller
+ (UIViewController *)currentViewController {
    // Find best view controller
    UIViewController* viewController = [UIApplication sharedApplication].keyWindow.rootViewController;
    return [self findBestViewController:viewController];
}

+ (UIViewController*)findBestViewController:(UIViewController*)vc {
    if (vc.presentedViewController) {
        return [self findBestViewController:vc.presentedViewController];
    } else if ([vc isKindOfClass:[UISplitViewController class]]) {
        UISplitViewController* svc = (UISplitViewController*) vc;
        if (svc.viewControllers.count > 0)
        return [self findBestViewController:svc.viewControllers.lastObject];
        else
        return vc;
    } else if ([vc isKindOfClass:[UINavigationController class]]) {
        UINavigationController* svc = (UINavigationController*) vc;
        if (svc.viewControllers.count > 0)
        return [self findBestViewController:svc.topViewController];
        else
        return vc;
    } else if ([vc isKindOfClass:[UITabBarController class]]) {
        UITabBarController* svc = (UITabBarController*) vc;
        if (svc.viewControllers.count > 0)
        return [self findBestViewController:svc.selectedViewController];
        else
        return vc;
    } else {
        return vc;
    }
}

Полученный контроллер без проблем прыгает, например pu sh и присутствует. Но если мне нужно знать класс отображаемого в данный момент контроллера, если текущий контроллер содержит субконтроллеры, я не знаю, какой из них отображается в данный момент, в результате чего требования, соответствующие моей странице и всплывающему окну, будут неосуществимыми

...