[英]MFMessageComposeViewController cancel button not working
I use this block to send message to the contacts, after sending, the back button is there, but when I touch it nothing happens.我使用此块向联系人发送消息,发送后,后退按钮在那里,但是当我触摸它时没有任何反应。 Please help me out :)
请帮帮我:)
-(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];
}
}
Did you forget to implement mailComposeController:didFinishWithResult:
?...你忘记实现
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];
}
From apple documentation:来自苹果文档:
// The mail compose view controller delegate method
- (void)mailComposeController:(MFMailComposeViewController *)controller
didFinishWithResult:(MFMailComposeResult)result
error:(NSError *)error
{
[self dismissModalViewControllerAnimated:YES];
}
But you can handle all cases depend on your goal ...但是您可以根据您的目标处理所有情况......
Here's the answer for Swift 4, iOS 11这是 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)
}
The correct answer is to set the controller's messageComposeDelegate
, and to define the following delegate method:正确答案是设置控制器的
messageComposeDelegate
,并定义以下委托方法:
- (void)messageComposeViewController:(MFMessageComposeViewController *)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's answer is based on the MFMailComposeViewController
not the MFMessageComposeViewController
MFMessageComposeViewController
的答案基于MFMailComposeViewController
而不是MFMessageComposeViewController
If anyone needs it, the messageComposeDelegate method translated into Swift (3):如果有人需要它,messageComposeDelegate 方法可以翻译成 Swift (3):
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
controller.dismiss(animated: true)
}
Here's the answer for Swift 4, iOS 11这是 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;
}
Like the answers say, you need to dismiss in the delegate.就像答案所说的那样,您需要在委托中解雇。 My issue was I was setting
delegate
instead of messageComposeDelegate
(or mailComposeDelegate
for the e-mail version).我的问题是我正在设置
delegate
而不是messageComposeDelegate
(或电子邮件版本的mailComposeDelegate
)。
Be sure you're setting the right delegate :)确保您设置了正确的委托 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.