2010-12-01 3 views
0

Ok voici la situation: J'ai un ViewController principal (mainVC) avec un contrôleur de navigation (NC) et deux ViewController enfant (childVC1-childVC2).MFMailComposeViewController ruptures navigationController comportement

La barre de navigation de NC se cache quand viewWillAppear est appelée sur mainVC:
- (void) viewWillAppear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:TRUE animated:animated]; }

La barre de navigation est représentée avant toute vue enfant est poussé sur le mainVC via NC:
mainVC *childVC1 = [[childVController1 alloc] initWithNibName:@"childVController1" bundle:nil];
[self.navigationController setNavigationBarHidden:FALSE animated:TRUE];
[self.navigationController pushViewController:childVC1 animated:YES];
[childVC1 release];

La barre de navigation est à nouveau masquée via viewWillAppear de mainVC, lorsqu'elle est appelée après que toute vue enfant a été déclenchée via le bouton Back standard de la barre de navigation.

Tout fonctionne bien jusqu'à ce qu'un MFMailComposeViewController, le courrier standard viewController est appelé via la méthode presentModalViewController de tout enfant viewController:
- (void) sendMail {
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:[NSString stringWithFormat:@"Subject"];
NSString emailBody=[NSString stringWithFormat:@"Mail Message Body"]];
[picker setMessageBody:emailBody isHTML:NO];
[picker setToRecipients:[NSArray arrayWithObject:@"[email protected]"]];
if (picker != nil) {
[self presentModalViewController:picker animated:YES];
[picker release];
} else {
NSLog(@"No email configured");
}
}
- (void)mailComposeController:(MFMailComposeViewController
)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
[self dismissModalViewControllerAnimated:YES];
}

Maintenant, le courrier viewController est rejeté (se nt mail), et nous sommes sur l'enfant viewController.

À ce stade, si vous appuyez sur le bouton Précédent dans la barre de navigation pour revenir au CV principal, la barre de navigation n'est pas masquée. Parce que la méthode viewWillAppear sur mainVC n'est pas appelée. J'ai essayé de mettre en œuvre un travail en introduisant un délégué pour le contrôleur de navigation à partir de la vue enfant, cachant ainsi le NavBar et ouvrant la vue enfant après le démontage du contrôleur de courrier (courrier envoyé). Il a semblé faire l'affaire, mais en suivant les actions ci-dessus (courrier envoyé, cacher NavBar et pop enfant vue) si je pousse immédiatement une vue enfant (emailer childVC1 ou l'autre enfant plutôt plat VC2), puis le faire revenir par le bouton Retour, la barre de navigation ne se cache plus! Parce que la méthode viewWillAppear sur mainVC n'est toujours pas appelée. viewWillDisappear sur childVCs ne sont pas appelés non plus.

Je conclus qu'en appelant le mail viewController via la méthode presentModalViewController à partir de n'importe quel viewController enfant, je casse d'une manière ou d'une autre le mécanisme de navigation de navigationController.

Notez que le principalVC est affiché à l'intérieur d'un TabBarItem. Et si je vais dans un autre onglet et que je reviens à celui-ci, le comportement de navigationController est restauré - jusqu'à ce que j'envoie un autre courrier.

Il doit y avoir quelque chose que je ne fais pas correctement. Des idées?

+0

Je serais intéressé de voir ce qui se passe lorsque vous essayez de présenter un autre contrôleur de vue comme un modal (par opposition au contrôleur de messagerie.) – Sam

Répondre

1

Avez-vous essayé de placer le code masqué dans viewDidAppear au lieu de viewWillAppear?

+0

Merci pour la réponse. J'ai juste essayé ça. Malheureusement n'a pas aidé. – BoraOku

Questions connexes