MFMessageComposeViewController取消button不起作用

我使用这个块发送消息给联系人,发送后,后退button在那里,但是当我触摸它什么都没有发生。 请帮我:)

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

你忘了实现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]; } 

从苹果文档:

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

但是,您可以根据您的目标处理所有情况…

正确的答案是设置控制器的messageComposeDelegate ,并定义下面的委托方法:

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

@ Doro的答案是基于MFMailComposeViewController而不是MFMessageComposeViewController

如果有人需要,将MessageComposeDelegate方法翻译成Swift(3):

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