MFMessageComposeViewController 取消按钮不起作用
Posted
技术标签:
【中文标题】MFMessageComposeViewController 取消按钮不起作用【英文标题】:MFMessageComposeViewController cancel button not working 【发布时间】:2015-06-25 07:43:40 【问题描述】:我使用此块向联系人发送消息,发送后,返回按钮在那里,但是当我触摸它时没有任何反应。请帮帮我:)
-(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];
【问题讨论】:
仅对命名约定的评论:方法的名称应以小写开头,如–inviteIt:
【参考方案1】:
你忘了实现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];
但你可以处理所有情况取决于你的目标......
【讨论】:
哈哈,好!我会接受你的回答,虽然它应该是这样的:code
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result [self dismissModalViewControllerAnimated:YES]; if (result == MessageComposeResultCancelled) NSLog(@"消息取消"); else if (result == MessageComposeResultSent) NSLog(@"消息发送");否则 NSLog(@"消息失败");
好的,你可以根据需要组织你的逻辑 :) 嗯,这是我项目中的 sn-p - 并且推荐苹果 developer.apple.com/library/prerelease/ios/documentation/…【参考方案2】:
这是 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)
【讨论】:
【参考方案3】:正确答案是设置控制器的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 的回答是基于MFMailComposeViewController
而不是MFMessageComposeViewController
【讨论】:
【参考方案4】:如果有人需要,将messageComposeDelegate方法翻译成Swift(3):
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult)
controller.dismiss(animated: true)
【讨论】:
【参考方案5】:这是 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;
【讨论】:
【参考方案6】:就像答案说的那样,您需要在委托中解雇。我的问题是我设置了delegate
而不是messageComposeDelegate
(或mailComposeDelegate
用于电子邮件版本)。
确保您设置了正确的委托 :)
【讨论】:
以上是关于MFMessageComposeViewController 取消按钮不起作用的主要内容,如果未能解决你的问题,请参考以下文章