Уволить mailComposeController

Я пытаюсь отклонить почту из моего приложения после того, как оно сделано, если пользователь отправляет или отменяет. Но по некоторым причинам это никогда не отклоняется. Я перепробовал почти все. Я также зарегистрировал это, таким образом, я буду видеть, пошло ли это, чтобы уволить метод. И проблема в том, что он никогда не входит в метод отклонения.

Что я делаю неправильно???

- (IBAction)sendmail:(id)sender{
    UIGraphicsBeginImageContext(self.view.frame.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    NSData * imageData = UIImageJPEGRepresentation(image, 1.0);

    if ( [MFMailComposeViewController canSendMail] ) {
        MFMailComposeViewController * mailComposer = [[MFMailComposeViewController alloc] init];
        mailComposer.delegate = self;
        [mailComposer addAttachmentData:imageData mimeType:@"image/jpeg" fileName:@"attachment.jpg"];

        [mailComposer setSubject:@"Hello from My App!"];

        NSString *emailBody = @"Sent from My App, Still not in AppStore!";
        [mailComposer setMessageBody:emailBody isHTML:YES];

        [self presentModalViewController:mailComposer animated:YES];
    }
}

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

    NSLog (@"mail finished"); // NEVER REACHES THIS POINT.
}

2 ответа

Решение

Вы можете заменить эту строку:

[self dismissModalViewControllerAnimated:YES];

со следующей строкой:

[controller dismissModalViewControllerAnimated:YES];

MFMailComposeViewController класс наследует от UINavigationController и поэтому его делегатное свойство является "делегатом" для контроллера части "части" класса. Для обработки определенных методов делегата mail composer вам нужно установить ваш объект как mailComposeDelegate имущество:

mailComposer.mailComposeDelegate = self;

SWIFT 5.0:

Если вы реализуете протокол MFMailComposeViewControllerDelegate, вы должны содержать только следующую функцию в ViewController:

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) 
{
   controller.dismiss(animated: true, completion: nil)
}

Эта функция сделает все за вас. Если пользователь отправляет электронное письмо, представление исчезает автоматически. Любая дополнительная информация: mailComposeController

Другие вопросы по тегам