无法解雇MFMailComposeViewController,委托未调用

Rod*_*Rod 51 cocoa-touch objective-c ios mfmailcomposeviewcontroller

我打电话MFMailComposeViewControllerUITableViewController.问题是当我在"邮件撰写"窗口中选择" 取消"或" 发送"按钮时,从不调用委托方法:

mailComposeController:(MFMailComposeViewController*)controllerdidFinishWithResult 
Run Code Online (Sandbox Code Playgroud)

这是表视图类:

@implementation DetailsTableViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section==0 && indexPath.row==4) {
        //SEND MAIL
        MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
        controller.mailComposeDelegate = self;
        if ([MFMailComposeViewController canSendMail]) {
            [controller setSubject:[NSString stringWithFormat:@"Ref %@",[item objectForKey:@"reference"]]];
            [controller setMessageBody:@" " isHTML:NO]; 
            [controller setToRecipients:[NSArray arrayWithObject:[item objectForKey:@"email"]]]; 
            [self presentModalViewController:controller animated:YES];
        }
        [controller release];       
    }
}

- (void)mailComposeController:(MFMailComposeViewController*)controllerdidFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
    // NEVER REACHES THIS PLACE
    [self dismissModalViewControllerAnimated:YES];
    NSLog (@"mail finished");
}
Run Code Online (Sandbox Code Playgroud)

应用程序不会崩溃.按下"取消"或"发送"按钮后,"构建窗口"将停留在屏幕上并禁用按钮.我可以按Home键退出应用程序.

我可以打开TableView的其他模态视图,但不能打开MailCompose.

mxg*_*mxg 218

确保你使用

controller.mailComposeDelegate = self;
Run Code Online (Sandbox Code Playgroud)

并不是

controller.delegate = self;
Run Code Online (Sandbox Code Playgroud)

  • `MFMailComposeViewController`是`UINavigationController`的子类.他们这样做是为了你可以实现`UINavigationControllerDelegate`方法. (10认同)

小智 14

您的方法签名不正确:

- (void)mailComposeController:(MFMailComposeViewController*)controllerdidFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
Run Code Online (Sandbox Code Playgroud)

应该:

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
Run Code Online (Sandbox Code Playgroud)