2015-06-25 22 views
8

Używam tego bloku do wysyłania wiadomości do kontaktów, po wysłaniu przycisku wstecz tam jest, ale kiedy go dotknę, nic się nie dzieje. Proszę mi pomóc :)Przycisk anulowania MFMessageComposeViewController nie działa

-(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

komentarz na nazewnictwo tylko: Nazwy metod powinno być z małymi początkowego, jak '' – holex

+0

-inviteIt: Ok, dzięki :) –

Odpowiedz

15

Zapomniałeś wdrożyć mailComposeController:didFinishWithResult: ...

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

Z dokumentacji jabłoni:

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

Ale można obsługiwać wszystkie przypadki, zależy od gol ...

+0

~ haha, dobre ! Przyjmuję twoją odpowiedź, chociaż powinno to wyglądać tak: 'code'- (void) messageComposeViewController: (MFMessageComposeViewController *) controller didFinishWithResult: (MessageComposeResult) result { [self dismissModalViewControllerAnimated: YES]; if (result == MessageComposeResultCancelled) NSLog (@ "Wiadomość anulowana"); else if (result == MessageComposeResultSent) NSLog (@ "Wiadomość wysłana"); else NSLog (@ "Wiadomość nieudana"); } –

+0

ok, możesz zorganizować logikę, jak chcesz :) hm, jest to fragment roboczy z mojego projektu - i jako zalecane jabłko https://developer.apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual /SystemMessaging_TopicsForIOS/Articles/SendingaMailMessage.html – Doro

2

Poprawna odpowiedź to ustawienie kontrolera na messageComposeDelegate, a także określić w następujący sposób Delegat:

- (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"); 
} 

@ odpowiedź Doro opiera się na nie MFMailComposeViewControllerMFMessageComposeViewController

1

Jeśli ktoś potrzebuje, metoda messageComposeDelegate języku Swift (3):

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

Oto odpowiedź dla 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

Oto odpowiedź dla 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) 
    } 
Powiązane problemy