Уволить 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