2016-03-09 7 views
0

Я реализовал MFMailComposeViewController почти во всех моих предыдущих приложениях iOS, и я никогда не получал эту проблему раньше. Мой код отлично работает в iOS 8 и сразу же отключает экран электронной почты, но он не делает то же самое в iOS 9. Моя строка HTML также правильна и содержит правильное тело сообщения электронной почты.Отключить экран MFMailCompose в iOS 9 - Работает отлично в iOS 8

На устройстве 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 

Любая помощь приветствуется.

Спасибо.

ответ

0

Попробуйте заменить:

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]; 
+0

Спасибо. Я попытаюсь проверить, работает ли это. У меня сейчас нет устройства iOS 9, поэтому мне потребуется несколько дней. –