来自实用程序类的sharedInstance的presentViewController

时间:2018-11-30 22:47:32

标签: ios objective-c singleton presentviewcontroller

我想通过驻留在可通过共享实例访问的实用工具类中的某些代码来呈现MFMailComposerViewController。

当我尝试使用

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

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

当我尝试使用navigationController时:

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

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

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

感谢有关如何执行此操作的任何建议。

1 个答案:

答案 0 :(得分:1)

您可以从最高俯视图控制器显示它。这是我要做的一件事情。

+ (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;
}