MFMailComposeViewController无法关闭

3

我有一个应用程序,其中我使用电子邮件给开发者按钮。当我按下按钮时,VEMailView-controller会打开。这只是MFMailComposeViewController的包装器。

当我点击“发送”按钮时,控制器必须关闭,但我只看到一个白色窗口。没有更多了。它必须关闭到主ViewController。如何修复?

这是我的代码:

    #import <MessageUI/MessageUI.h>

#import "VEMailView.h"

@interface VEMailView () <
    MFMailComposeViewControllerDelegate,
    UINavigationControllerDelegate
>
// UILabel for displaying the result of the sending the message.

@end


@implementation VEMailView{
    BOOL alreadyOpened;
}



- (void)viewDidLoad
{
    [super viewDidLoad];
    alreadyOpened = NO;

}
- (void) viewDidAppear:(BOOL)animated {
[self showMailPicker];

}

- (void)showMailPicker
{

    if ([MFMailComposeViewController canSendMail])

    {
        [self displayMailComposerSheet];
    }

}

- (void)displayMailComposerSheet 
{
    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
    picker.mailComposeDelegate = self;

    [picker setSubject:@"iOS"];

    NSArray *toRecipients = [NSArray arrayWithObject:@"first@example.com"];

    [picker setToRecipients:toRecipients];

    NSString *emailBody = @" ";
    [picker setMessageBody:emailBody isHTML:NO];

    [self presentViewController:picker animated:YES completion:NULL];
}

- (void)mailComposeController:(MFMailComposeViewController*)controller 
        didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{

    switch (result)
    {
        case MFMailComposeResultCancelled:
            NSLog(@"Result: Mail sending canceled");
            break;
        case MFMailComposeResultSaved:
            NSLog(@"Result: Mail saved");
            break;
        case MFMailComposeResultSent:
            NSLog(@"Result: Mail sent");
            break;
        case MFMailComposeResultFailed:
            NSLog(@"Result: Mail sending failed");
            break;
        default:
            NSLog(@"Result: Mail not sent");
            break;
    }
[self dismissViewControllerAnimated:YES completion:nil];
}



@end

[self dismissViewControllerAnimated:YES completion:nil]; => [controller dismissViewControllerAnimated:YES completion:nil]; - Larme
@Larme,不行。 - Vyacheslav
我在这里没有看到任何问题。你能发一下你的示例代码吗?我尝试了你的代码,但是什么也没看到。 - Tony
快速问题:你有导航栏吗? - Larme
@Larme,不好意思,我只是有一个空的ViewController。 - Vyacheslav
@VietHung。这个想法是:1.打开空的ViewController,2.发送电子邮件,3.自动全部关闭。 - Vyacheslav
2个回答

3
那是因为您正在创建额外的视图控制器。在包含按钮的视图控制器中创建 MFMailComposeViewController。邮件撰写控制器本身就是一个控制器。之所以出现白屏,是因为这是您的VEMailView的默认视图。消除它并加入以下方法:
- (void)showMailPicker;
- (void)displayMailComposerSheet;

在带有按钮的视图控制器中,将其设置为委托。


这个确实可行。但是它不能自动工作。你给了我一个绝妙的想法,该如何自动化解决。我将在我的答案中编写解决方案。无论如何感谢你。https://dev59.com/iX7aa4cB1Zd3GeqPsZ3W#23008141 - Vyacheslav

1
我找到了自己的解决方案。
要解决这个问题,请更改:
[self dismissViewControllerAnimated:YES completion:nil];

转换为

[self dismissViewControllerAnimated:YES completion:^{[self dismissViewControllerAnimated:YES completion:nil];}];

感谢Michal提供的想法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接