MFMailComposeViewController显示来自NSObject类的问题 - iOS

时间:2014-08-27 16:57:26

标签: ios email uiviewcontroller modalviewcontroller mfmailcomposer

尝试从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中,虽然我可以,但这似乎是一种奇怪的方式来继续。

全部谢谢!

1 个答案:

答案 0 :(得分:1)

我以为我会回来回答这个问题!

必须在ViewController中启动MFMailComposeViewController。这是设计的。