可能重复:
行动单没有';当MFMailComposeViewController';点击的取消按钮
我已经根据苹果提供的代码示例在我的应用程序中实现了标准邮件功能。
我正在按如下方式设置代表:
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
我正在实施
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
点击"发送"按钮会调用代理,一切都很好。然而,点击"取消"按钮不会调用代理,只会使视图变暗;应用程序就挂在那里。
在阅读了这里类似的帖子后,我一直在想,由于某种原因,这个视图可能会离开屏幕,这在这一点上超出了我的理解范围。请注意,视图是以编程方式创建的,并且没有使用xib文件。
有什么想法吗?
您需要实现mailComposeController:didFinishWithResult:error
委托。在这种情况下,您可以忽略显示邮件视图的视图。如果你已经将邮件视图作为模式视图打开,那么消除这种情况的方法是-
- (void)mailComposeController:(MFMailComposeViewController*)controller
didFinishWithResult:(MFMailComposeResult)result
error:(NSError*)error
{
if(error) NSLog(@"ERROR - mailComposeController: %@", [error localizedDescription]);
[self dismissModalViewControllerAnimated:YES];
return;
}
这可能对有帮助
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
// Notifies users about errors associated with the interface
switch (result)
{
case MFMailComposeResultCancelled:
//NSLog(@"Result: canceled");
break;
case MFMailComposeResultSaved:
//NSLog(@"Result: saved");
break;
case MFMailComposeResultSent:
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Result" message:@"Mail Sent Successfully" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
[alert release];
}
break;
case MFMailComposeResultFailed:
//NSLog(@"Result: failed");
break;
default:
//NSLog(@"Result: not sent");
break;
}
[self dismissModalViewControllerAnimated:YES];
}
尝试添加甚至是简单的委托:
[picker setDelegate:self];