2015-06-25 6 views
8

Ich benutze diesen Block, um eine Nachricht an die Kontakte zu senden, nach dem Senden ist die Zurück-Taste vorhanden, aber wenn ich berühre passiert nichts. Bitte helfen Sie mir :)MFMessageComposeViewController Abbrechen-Taste funktioniert nicht

-(IBAction) InviteIt:(id) sender{ 


    if ([MFMessageComposeViewController canSendText]) { 
     MFMessageComposeViewController *messageComposer = 
     [[MFMessageComposeViewController alloc] init]; 
     messageComposer.messageComposeDelegate = self; 
     NSString *message = @"You have more body buddies than you think at: http://www.itunes.com/app/JoyChain "; 
     [messageComposer setBody:message]; 
     messageComposer.recipients = [NSArray arrayWithObjects:_itsnum, nil]; 
     messageComposer.messageComposeDelegate = self; 
     [self presentViewController:messageComposer animated:YES completion:nil]; 

    } 

} 
+0

Kommentar auf Konvention nur zu benennen: Die Namen sollten mit Klein initial sein Methoden, wie '-inviteIt:' – holex

+0

Okay, danke ~ :) –

Antwort

15

Sie mailComposeController:didFinishWithResult: zu implementieren Haben Sie vergessen ...

- (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 
    [controller dismissViewControllerAnimated:YES completion:nil]; 
} 

Von Apfel Dokumentation:

// The mail compose view controller delegate method 
- (void)mailComposeController:(MFMailComposeViewController *)controller 
       didFinishWithResult:(MFMailComposeResult)result 
       error:(NSError *)error 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

Aber Sie können alle Fälle behandeln, hängt von Ihrer Ziel ...

+0

haha, gut ! Ich werde Ihre Antwort akzeptieren, obwohl es so sein sollte: 'code'- (void) messageComposeViewController: (MFMessageComposeViewController *) Controller didFinishWithResult: (MessageComposeResult) Ergebnis { [selbst entlassenModalViewControllerAnimated: YES]; if (Ergebnis == MessageComposeResultCancelled) NSLog (@ "Nachricht abgebrochen"); sonst if (Ergebnis == MessageComposeResultSent) NSLog (@ "Nachricht gesendet"); sonst NSLog (@ "Nachricht fehlgeschlagen"); } –

+0

ok, Sie können organisieren Sie Logik wie Sie wollen :) hm, das funktioniert Schnipsel von meinem Projekt - und wie empfohlen Apple https://developer.apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual /SystemMessaging_TopicsForIOS/Articles/SendingaMailMessage.html – Doro

2

Die richtige Antwort ist diedes Controllers zu setzen, und die folgende Delegatmethode zu definieren:

- (void)messageComposeViewController:(MFMessageComposeViewCont‌​roller *)controller 
       didFinishWithResult:(MessageComposeResult)result { 

    [self dismissModalViewControllerAnimated:YES]; 
    if (result == MessageComposeResultCancelled) 
    NSLog(@"Message cancelled"); 
    else if (result == MessageComposeResultSent) 
    NSLog(@"Message sent"); 
    else 
    NSLog(@"Message failed"); 
} 

@ Antwort Doros auf der MFMailComposeViewController basiert nicht die MFMessageComposeViewController

1

Wenn jemand braucht es, die messageComposeDelegate Methode übersetzt in Swift (3):

func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { 
    controller.dismiss(animated: true) 
} 
0

Hier ist die Antwort für Swift 4, iOS 11

case MFMailComposeResult.cancelled: 
      print("Mail cancelled"); 
      break; 
     case MFMailComposeResult.saved: 
      print("Mail saved"); 
      break; 
     case MFMailComposeResult.sent: 
      print("Mail sent"); 
      break; 
     case MFMailComposeResult.failed: 
      print("Mail sent failure: %@", error?.localizedDescription); 
      break; 
     default: 
      break; 
     } 
0

Hier ist die Antwort für Swift 4, iOS 11

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { 
     print("Emailing attempt, error="+(error?.localizedDescription)!)   
     switch (result){ 
     case MFMailComposeResult.cancelled: 
      print("Mail cancelled"); 
      break; 
     case MFMailComposeResult.saved: 
      print("Mail saved"); 
      break; 
     case MFMailComposeResult.sent: 
      print("Mail sent"); 
      break; 
     case MFMailComposeResult.failed: 
      print("Mail sent failure: %@", error?.localizedDescription); 
      break; 
     default: 
      break; 
     } 
     // Close the Mail Interface 
     controller.dismiss(animated: true) 
    } 
Verwandte Themen