J'essaie d'incorporer MFMailComposeViewController
dans mon application. Lorsque je le présente de manière modale, le bouton d'envoi fonctionne correctement et l'e-mail est envoyé, ce qui implique que le résultat envoyé au délégué est correct dans ce cas. Alors que lorsque j'appuie sur le bouton Annuler, l'application est suspendue. Le journal ne montre aucune erreur non plus, juste l'écran s'assombrit et tout est désactivé. Apparemment, le résultat n'est pas transmis au délégué (je l'ai vérifié dans les journaux). il apparaît que leLa feuille d'action ne s'affiche pas lorsque le bouton d'annulation de MFMailComposeViewController est tapé
(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
n'est jamais appelé à chaque pression sur le bouton d'annulation. Probablement c'est la raison pour laquelle la feuille d'action (Enregistrer le brouillon, annuler, supprimer le brouillon) n'est pas affiché et donc l'application se bloque juste là. J'utilise le code exact des exemples d'applications d'Apple (MailComposer), il fonctionne parfaitement là, mais échoue en quelque sorte dans le mien. :(
bien vouloir me aider si quelqu'un a jamais rencontré le même problème, et avec succès résolu il
Mon code:..
-(IBAction)emailButtonPressed:(id)sender{
Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
if (mailClass != nil)
{
if ([mailClass canSendMail])
{
[self displayComposerSheet];
}
else
{
[self launchMailAppOnDevice];
}
}
else
{
[self launchMailAppOnDevice];
}
}
#pragma mark -
#pragma mark Compose Mail
-(void)displayComposerSheet
{
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:@"Ilusiones"];
// Set up recipients
NSArray *toRecipients = [NSArray arrayWithObject:@"[email protected]"];
[picker setToRecipients:toRecipients];
// Attach a screenshot to the email
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *myData = UIImagePNGRepresentation(viewImage);
[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"viewImage"];
// Fill out the email body text
NSString *emailBody = @"";
[picker setMessageBody:emailBody isHTML:NO];
[self presentModalViewController:picker animated:YES];
[picker release];
}
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
switch (result)
{
case MFMailComposeResultCancelled:
NSLog(@"Result: canceled");
break;
case MFMailComposeResultSaved:
NSLog(@"Result: saved");
break;
case MFMailComposeResultSent:
NSLog(@"Result: sent");
break;
case MFMailComposeResultFailed:
NSLog(@"Result: failed");
break;
default:
NSLog(@"Result: not sent");
break;
}
[self dismissModalViewControllerAnimated:YES];
}
#pragma mark -
#pragma mark Workaround
-(void)launchMailAppOnDevice
{
NSString *recipients = @"mailto:[email protected][email protected],[email protected]&subject=illusions!";
NSString *body = @"&body=xyz";
NSString *email = [NSString stringWithFormat:@"%@%@", recipients, body];
email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]];
}
Je sais, cela fonctionne bien sur d'autres vues de mon application aussi. Mais sur cette vue, la feuille d'action n'apparaît jamais! Est-ce parce que mon point de vue est déjà une vue modale? – Anam
puis sur quelle vue voulez-vous le mailcomposer – Splendid