После нажатия кнопки отмена в MFMessageComposeViewController ничего не происходит

#iphone #objective-c #ios #sms #messageui

#iPhone #objective-c #iOS #sms #messageui

Вопрос:

После того, как после использования MFMailComposeViewController move to MFMessageComposeViewController было прямо, но есть подвох.

Предположим, что этот код:

 MFMessageComposeViewController* mySMS = [[MFMessageComposeViewController alloc] init];
[mySMS setDelegate:self];
[self presentModalViewController:mySMS animated:YES];
 

Это работает таким образом для почты, но в sms вы должны установить другой делегат для внутренней структуры, подобной этой:

 [SMS setMessageComposeDelegate:self];
 

Надеюсь, вы не застряли на этом, как я сделал сегодня рано.

Ответ №1:

Вам необходимо реализовать метод делегирования -(void)mailComposeController(MFMailComposeViewController*)controller didFinishWithResult (MFMailComposeResult)result error:(NSError*)error:

И внутри него вы должны отклонить его самостоятельно:

 -(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{
    [self dismissModalViewControllerAnimated:YES]; 
}
 

Комментарии:

1. Упомянутый вами код предназначен для класса MFMailComposer. Вопрос был задан специально MFMessageComposer.

2. Для MFMessageComposer необходимо использовать следующее: developer.apple.com/library/ios/documentation/MessageUI /… :

Ответ №2:

Вы можете увидеть MFMailComposeResult в документации Apple

   enum MFMailComposeResult {
    MFMailComposeResultCancelled,
    MFMailComposeResultSaved,
    MFMailComposeResultSent,
    MFMailComposeResultFailed
 };
 typedef enum MFMailComposeResult MFMailComposeResu< 
 

И вы должны уволить контроллер самостоятельно в методе делегирования

  - (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];
}