簡體   English   中英

出現鍵盤時MFMailComposeViewController didFinishWithResult問題

[英]MFMailComposeViewController didFinishWithResult issue when the keyboard appears

我已經有了MFMailComposeViewController的標准實現。

我已經設置了正確的委托協議,並且在didFinishWithResult方法上發生了日志。

看到:

mailComposer = [[MFMailComposeViewController alloc] init];
[mailComposer setSubject:emailTitle];
[mailComposer setMessageBody:messageBody isHTML:YES];
mailComposer.mailComposeDelegate = self;

[[self getController] presentViewController:mailComposer animated:YES completion:NULL];

- (void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    NSLog(@"mail dismiss");
    [[self getController] dismissViewControllerAnimated:YES completion:NULL];
}

這說明郵件編輯器正常運行,並且一切正常。 意思是,如果我按下“取消”按鈕,則didFinishWithResult方法將被調用,而mailComposer將會被關閉。

但是,如果我嘗試鍵入任何內容,例如TO:電子郵件地址或郵件編輯器本身中的任何其他內容, 則感覺鍵盤出現正在刪除我的視圖控制器的委托操作,因為“取消”和“發送”按鈕不會觸發任何操作

有什么想法嗎? 這讓我瘋狂 :/

干杯

編輯

這是getController的代碼:

- (UIViewController *) getController
{
    Class vcc = [UIViewController class];

    UIResponder *responder = self;
    while ((responder = [responder nextResponder]))
        if ([responder isKindOfClass: vcc])
            return (UIViewController *)responder;

    return nil;
}

當UITextField成為FirstResponder時,控制器將收到resignFirstResponder。

為什么使用方法“ getController”? 在提供MFMailComposeViewController的ViewController上創建屬性。

設置一個開關來捕獲來自郵件編寫器的結果,如下所示:

-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
    switch (result) {
        case MFMailComposeResultCancelled:
            // User tapped cancel button
            break;
        case MFMailComposeResultSaved:
            // User saved email
            break;
        case MFMailComposeResultSent:
            // User sent email
            break;
        case MFMailComposeResultFailed:
            break;
        default:
            break;
    }
    [self dismissViewControllerAnimated:YES completion:NULL];
}

我建議此實現:

- (void) presentMailViewController
    if([MFMailComposeViewController canSendMail])
    {
        MFMailComposeViewController *mail = [MFMailComposeViewController new];
        mail.mailComposeDelegate = self;
        mail.navigationBar.tintColor = self.navigationController.navigationBar.tintColor;;
        [self.navigationController presentViewController:mail animated:YES completion:nil];
    }   
}

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    if(error)
    {
       //...
    }
    [self dismissViewControllerAnimated:YES completion:nil];
}   

我建議您閱讀此頁面: 代碼命名基礎

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM