【问题标题】:Dismiss MFMailCompose Screen in iOS 9 - Works Fine in iOS 8在 iOS 9 中关闭 MFMailCompose 屏幕 - 在 iOS 8 中运行良好
【发布时间】:2016-03-09 08:00:16
【问题描述】:

我在几乎所有以前的 iOS 应用程序中都实现了 MFMailComposeViewController,我以前从未遇到过这个问题。我的代码在 iOS 8 中运行良好并立即关闭电子邮件屏幕,但在 iOS 9 中却不一样。我的 HTML 字符串也是正确的,它构成了正确的电子邮件正文。

在 iOS 8 设备上,当我单击电子邮件按钮时,它会打开电子邮件撰写屏幕。我可以保存草稿/取消电子邮件/发送电子邮件,它会立即关闭电子邮件屏幕并返回包含电子邮件按钮的屏幕。

在 iOS 9 设备上,我可以打开电子邮件撰写屏幕,它会显示正确的主题和电子邮件正文,但是当我点击保存草稿/取消电子邮件/发送电子邮件时,它永远不会关闭电子邮件撰写屏幕。

我的代码中没有发现任何错误。苹果是否在 iOS 9 中更改了一些不允许我的代码工作的内容?

//.h file

#import <UIKit/UIKit.h>

#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMailComposeViewController.h>

@interface ViewController : UIViewController<MFMailComposeViewControllerDelegate>{


}

@property(nonatomic,assign) id<MFMailComposeViewControllerDelegate> mailComposeDelegate;


- (IBAction)emailThisAdToFriends:(id)sender;


@end

这是我的 .m 文件代码

#import "ViewController.h”

@interface ViewController ()
@end

@implementation ViewController

NSString *finalEmailString;

- (void)viewDidLoad {
    [super viewDidLoad];

}


-(void)createStringToEmail {

   //create finalEmailString which is HTML Code    

   //html code 

  }


- (IBAction)emailThisAdToFriends:(id)sender {

     //compose email string --(finalEmailString)

     [self createStringToEmail];


    if ([MFMailComposeViewController canSendMail])
    {

        MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
        mailViewController.mailComposeDelegate = self;
        [mailViewController setSubject:@“mySubject”];
        [mailViewController setMessageBody:finalEmailString isHTML:YES];

        //present controller

        UIViewController *controller = self.view.window.rootViewController;

        [controller presentViewController:mailViewController animated: YES completion:nil];


    }
    else
    {
        NSLog(@"Device unable to send mail");
    }

}


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

        NSLog(@“Sent email.");

        break;
    }

    case MFMailComposeResultSaved:
    {

        NSLog(@"saved draft");

        break;
    }

    case MFMailComposeResultCancelled:
    {


        NSLog(@"cancelled");

        break;
    }

    case MFMailComposeResultFailed:
    {

        NSLog(@"Mail failed");

        break;
    }

    default:
    {

        NSLog(@"An error occurred “);

        break;
    }
}

//dismiss email compose screen

 UIViewController *dismissController = self.view.window.rootViewController;

[dismissController dismissViewControllerAnimated:YES completion:NULL];

}

@end

感谢任何帮助。

谢谢。

【问题讨论】:

    标签: objective-c ios8 ios9 dismiss mfmailcomposer


    【解决方案1】:

    尝试替换:

    UIViewController *controller = self.view.window.rootViewController;
    
    [controller presentViewController:mailViewController animated: YES completion:nil];
    

    与:

    [self presentViewController:mailViewController animated:YES completion:NULL];
    

    UIViewController *dismissController = self.view.window.rootViewController;
    
    [dismissController dismissViewControllerAnimated:YES completion:NULL];
    

    与:

    [self dismissViewControllerAnimated:YES completion:NULL];
    

    【讨论】:

    • 谢谢。我会尝试检查它是否有效。我现在没有 iOS 9 设备,所以需要几天时间。
    猜你喜欢
    • 2017-03-12
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2015-09-01
    相关资源
    最近更新 更多