尝试从NSObject类实现时,我遇到了MFMailComposeViewController的问题。
我已多次使用MFMailComposeViewController而没有问题,但总是在视图控制器中。
但是,在这种情况下,我调用一个将运行的NSObject类,而用户通常在一个ViewController上。但是,这段代码是从许多视图控制器运行的,因此使用了NSObject,我需要让作曲家在任何视图控制器上呈现。
问题是,完成后,它需要抛弃一个电子邮件编写器,我无法让它工作。相反,它永远不会启动Mail Composer视图。
我有代理,代码跟随,代理设置在.h。
中MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
if([MFMailComposeViewController canSendMail]){
mc.mailComposeDelegate = self;
[mc setSubject:emailTitle];
[mc setMessageBody:messageBody isHTML:NO];
[mc setToRecipients:toRecipents];
[[mc navigationBar] setTintColor: [UIColor whiteColor]]; // Text color
// Present mail view controller on screen
[self presentViewController:mc animated:YES completion:^{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}];
}
- (void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
switch (result)
{
case MFMailComposeResultCancelled:
// NSLog(@"Mail cancelled");
break;
case MFMailComposeResultSaved:
// NSLog(@"Mail saved");
break;
case MFMailComposeResultSent:
// NSLog(@"Mail sent");
break;
case MFMailComposeResultFailed:
// NSLog(@"Mail sent failure: %@", [error localizedDescription]);
break;
default:
break;
}
// Close the Mail Interface
[self dismissViewControllerAnimated:YES completion:NULL];
}
我还尝试将代码转移到AppDelegate,并使用来自NSObject类的通知来激活编写器,但是,使用此方法我发现作曲家将显示在推送的VC上,但是如果模态视图是目前正在显示,它不会显示作曲家。
最后,我尝试添加一个完全独立的视图控制器,向其添加邮件编辑器,并通过AppDelegate添加它,但这也只会显示在推送的VC上,而不是模式VC。
我的想法是,我需要找到顶级'导航堆栈,为了显示上面的作曲家,但我不是百分百肯定。
我欢迎任何能够对我如何实现这一目标的人发表评论,因为我觉得它必须是可能的,因为我能够将MailController添加到模态视图中,如果代码在查看控制器本身,但显然这意味着我需要将这样的代码添加到多个VC中,虽然我可以,但这似乎是一种奇怪的方式来继续。
全部谢谢!
答案 0 :(得分:1)
我以为我会回来回答这个问题!
必须在ViewController中启动MFMailComposeViewController。这是设计的。