簡體   English   中英

MFMessageComposeViewController 取消按鈕不起作用

[英]MFMessageComposeViewController cancel button not working

我使用此塊向聯系人發送消息,發送后,后退按鈕在那里,但是當我觸摸它時沒有任何反應。 請幫幫我:)

-(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];

    }

}

你忘記實現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];
}

但是您可以根據您的目標處理所有情況......

這是 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)
    }

正確答案是設置控制器的messageComposeDelegate ,並定義以下委托方法:

- (void)messageComposeViewController:(MFMessageComposeViewCont‌​roller *)controller
                 didFinishWithResult:(MessageComposeResult)result {

  [self dismissModalViewControllerAnimated:YES];
  if (result == MessageComposeResultCancelled)
    NSLog(@"Message cancelled");
  else if (result == MessageComposeResultSent)
    NSLog(@"Message sent");
  else
    NSLog(@"Message failed");
}

MFMessageComposeViewController的答案基於MFMailComposeViewController而不是MFMessageComposeViewController

如果有人需要它,messageComposeDelegate 方法可以翻譯成 Swift (3):

func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
    controller.dismiss(animated: true)
}

這是 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;
        }

就像答案所說的那樣,您需要在委托中解雇。 我的問題是我正在設置delegate而不是messageComposeDelegate (或電子郵件版本的mailComposeDelegate )。

確保您設置了正確的委托 :)

暫無
暫無

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

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