Уволить MFMailCompose экран в iOS 9 - отлично работает в iOS 8
Я реализовал MFMailComposeViewController почти во всех моих предыдущих приложениях для iOS, и у меня никогда не было этой проблемы раньше. Мой код отлично работает в iOS 8 и сразу же закрывает экран электронной почты, но в iOS 9 он не работает. Моя HTML-строка также верна и составляет правильное тело сообщения электронной почты.
На устройстве iOS 8, когда я нажимаю кнопку электронной почты, открывается экран создания электронной почты. Я могу сохранить черновик / отменить электронную почту / отправить электронную почту, и он сразу же закрывает экран электронной почты и возвращается на экран, содержащий кнопку электронной почты.
В то время как на устройстве iOS 9 я могу открыть экран создания электронной почты, и он показывает правильную тему и текст сообщения электронной почты, но когда я нажимаю сохранить черновик / отменить электронную почту / отправить электронную почту, то он никогда не закрывает экран создания электронной почты.
Я не вижу ошибок в моем коде. Apple изменила что-то в 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
Любая помощь приветствуется.
Благодарю.
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];