我的应用程序在后台运行一些任务,然后最后显示一条警报,询问用户是否要通过电子邮件发送结果。
在应用程序的其他地方,我以应有的方式使用 MFMailComposeViewController
(例如 here )。然而,在这里,由于我处于可能长时间运行的任务的完成 block 中,因此我没有引用可用于以下调用的 UIViewController
实例:
...
mailSendingController.mailComposeDelegate = self;
[self presentModalViewController:mailSendingController animated:YES];
我可能可以保留对调用该任务的 VC 的引用,但它可能会在任务完成之前被忽略。
我能做什么?创建一个假的隐藏 VC 只是为了作为 MFMailComposeViewController 的基础?有没有办法在没有底层 VC 的情况下显示 MFMailComposeViewController ?以某种方式使用当前位于堆栈顶部的 VC?...
欢迎任何想法。
最佳答案
首先,从 iOS6 [1] 开始,presentModalViewController:animated:
已被弃用。你应该使用 presentViewController:animated:completion:
[2]
我只需获取应用程序的 Root View Controller ,然后使用它来呈现模态视图 Controller 。这样,无论如何它都会位于顶部,并且您知道 Root View Controller 始终在那里。
看看这个question有关访问应用程序的 Root View Controller 的一些提示。
此外,如果您要执行 GUI 操作,请确保返回主线程:
dispatch_async(dispatch_get_main_queue(), ^{
// Present the VC here
});
祝你好运!
关于没有 UIViewController 的 iOS 邮件编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21155917/