presentViewController 来自 sharedInstance of utility class

presentViewController from sharedInstance of utility class

我想展示一个来自一些代码的 MFMailComposerViewController,这些代码深藏在实用程序 class 中,可通过共享实例访问。

当我尝试使用

[self presentViewController:mailVC animated:YES completion:nil];

我收到一个错误,显示的视图不在有意义的视图层次结构中。

当我尝试使用导航控制器时:

[self.navigationController presentViewController:mailVC animated:YES completion:nil];

没有错误发生但什么也没发生。

我应该从调用 sharedInstance 的 VC 中呈现它是有道理的,但我不知道如何从共享实例中引用它。

感谢您就如何执行此操作提出任何建议。

您可以从最顶层的视图控制器中展示它。这是我得到一个的方法。

+ (UIViewController *)topViewController {
    UIViewController *topController = [[UIApplication sharedApplication].windows firstObject].rootViewController;

    if ([topController isKindOfClass:[UINavigationController class]]) {
        topController = [[(UINavigationController *)topController viewControllers] lastObject];
    }

    while (topController.presentedViewController) {
        topController = topController.presentedViewController;

        if ([topController isKindOfClass:[UINavigationController class]]) {
            topController = [[(UINavigationController *)topController viewControllers] lastObject];
        }
    }

    return topController;
}