在MFMessageComposeViewController中点击取消后没有任何反应

时间:2011-10-28 20:14:48

标签: iphone objective-c ios sms messageui

虽然在使用MFMailComposeViewController之后,移动到MFMessageComposeViewController是直接的,但有一个问题。

假设此代码:

MFMessageComposeViewController* mySMS = [[MFMessageComposeViewController alloc] init];
[mySMS setDelegate:self];
[self presentModalViewController:mySMS animated:YES];

它以这种方式用于邮件,但在短信中你应该将委托设置为不同的内部结构:

[SMS setMessageComposeDelegate:self];

希望你不要像今天早些时候那样陷入困境。

2 个答案:

答案 0 :(得分:4)

您需要实现委托方法-(void)mailComposeController(MFMailComposeViewController*)controller didFinishWithResult (MFMailComposeResult)result error:(NSError*)error:

在里面你应该自己解雇它:

-(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{
    [self dismissModalViewControllerAnimated:YES]; 
}

答案 1 :(得分:0)

您可以在Apple文档中看到MFMailComposeResult

  enum MFMailComposeResult {
    MFMailComposeResultCancelled,
    MFMailComposeResultSaved,
    MFMailComposeResultSent,
    MFMailComposeResultFailed
 };
 typedef enum MFMailComposeResult MFMailComposeResult; 

你必须在委托方法中自行解雇控制器

 - (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
   [self dismissViewControllerAnimated:YES completion:NULL];
}