ios - 来自实用程序类的 sharedInstance 的 presentViewController

标签 ios objective-c singleton presentviewcontroller

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

当我尝试时

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

我收到一个错误,表示呈现 View 不在 View 层次结构中,这是有意义的。

当我尝试使用导航 Controller 时:

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

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

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

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

最佳答案

您可以从最顶层的 View Controller 中呈现它。这是我为了得到一个所做的。

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

关于ios - 来自实用程序类的 sharedInstance 的 presentViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53565926/

相关文章:

objective-c - 将 block 与 LLVM GCC 4.2 一起使用时出现编译问题

php - PHP 中的单例模式....如何在请求之间保存状态

ios - 可以将 html/css/js 嵌入到 ios native 应用程序中

javascript - 解析云代码两次发送推送通知

iphone - 将 NSString 分成几行(以适应所需的宽度)

oop - 在 Dart 中,是否可以在单例中传递参数?

java - 初始化可能失败的惰性单例的哪种实现?

ios - View 中的 ScrollView 不响应 IOS

ios - 以 uiscrollview 的负方式添加 View 并更改内容大小

iOS 如何从 tableview 单元格中获取按钮文本