52

から電話MFMailComposeViewControllerしていUITableViewControllerます。問題は、メール作成ウィンドウで[キャンセル]または[送信] ボタンを選択したときにデリゲート メソッドが呼び出されないことです。

mailComposeController:(MFMailComposeViewController*)controllerdidFinishWithResult 

テーブルビュークラスは次のとおりです。

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

アプリケーションはクラッシュしません。[キャンセル] または [送信] ボタンが押された後、作成ウィンドウはボタンが無効な状態で画面に表示されたままになります。ホームキーを押してアプリケーションを終了できます。

TableView から他のモーダル ビューを開くことはできますが、MailCompose を開くことはできません。

4

4 に答える 4

219

必ず使用してください

controller.mailComposeDelegate = self;

そしてそうではない

controller.delegate = self;
于 2010-12-25T13:47:59.343 に答える
2

私は同じ問題に直面し、過去 2 日間の修正を探していましたが、自分で修正を見つけました。

私の場合、私が提示していたビューコントローラー(この質問に従って「DetailsTableViewController」と言う)は、MFMailComposeViewController他のビューコントローラー(「BaseViewController」と言う)からすでに提示されています。

この問題はmodalPresentationStyle、BaseViewController から提示しているときに、'DetailsTableViewController' の ' ' にありました。

UIModalPresentationFormSheet' 'から ' ' に変更した瞬間 (さらに言えばUIModalPresentationPageSheet' ' 以外のものUIModalPresentationFormSheet)、問題が解決され、メール コントローラーのデリゲート メソッドが通常どおり起動し始めました。

注: 私は既に 'DetailsTableViewController' で以下のメソッドを呼び出していたので (この例では)、どの ' ' を使用しているかは問題ではありませんでしたmodalPresentationStyle

    - (void)viewWillLayoutSubviews{
    [super viewWillLayoutSubviews];
    self.view.superview.bounds = CGRectMake(0, 0, 1024, 768);
    self.view.superview.backgroundColor = [UIColor clearColor];
}
于 2016-09-29T06:31:23.977 に答える