ここで状況は次のとおりです。ナビゲーションコントローラ(NC)と2つの子ViewController(childVC1-childVC2)を持つメインViewController(mainVC)があります。MFMailComposeViewControllerがnavigationControllerの動作を中断します
viewWillAppearがmainVCに呼び出されたときにNCのナビゲーションバーが非表示にされます:
- (void) viewWillAppear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:TRUE animated:animated]; }
子ビューはNC経由mainVCにプッシュされる前に、ナビゲーションバーが表示されます。
mainVC *childVC1 = [[childVController1 alloc] initWithNibName:@"childVController1" bundle:nil];
[self.navigationController setNavigationBarHidden:FALSE animated:TRUE];
[self.navigationController pushViewController:childVC1 animated:YES];
[childVC1 release];
ナビゲーションバーの標準の[戻る]ボタンを使用して子ビューをポップした後で、ナビゲーションバーがmainVCのviewWillAppearを介して再び非表示になります。
すべてがMFMailComposeViewControllerまでスムーズに動作し、標準のメールのViewControllerは、任意の子のViewControllerからpresentModalViewControllerメソッド経由で呼び出されます。
- (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");
}
今 [self dismissModalViewControllerAnimated:YES];
}
}
- (void)mailComposeController:(MFMailComposeViewController
)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
のViewControllerが却下されたメール(SE NTメール)、私たちはchild viewController上にいます。
この時点で、ナビゲーションバーの[戻る]ボタンをタップしてメインVCに戻ると、ナビゲーションバーが非表示にならない。 mainVCのviewWillAppear
メソッドが呼び出されないためです。
私は、ナビゲーションビューアー内でナビゲーションコントローラーのデリゲートを導入し、NavBarを非表示にして、メールビューコントローラー(送信済みメール)を除外した後に子ビューをポップすることで回避策を実装しようとしました。
私は直ちに子ビュー(emailer childVC1またはむしろフラットなchildVC2)をプッシュし、それを介してポップバックすると、上記の操作(メールの送信、非表示のNavBarおよびポップの子ビュー)戻るボタンを押すと、ナビゲーションバーは再び隠されません! mainVCのviewWillAppear
メソッドがまだ呼び出されていないためです。子VCのviewWillDisappear
も呼び出されません。
メールのviewControllerを任意の子viewControllerからpresentModalViewController
メソッド経由で呼び出すと、私は何とかnavigationControllerのナビゲーションメカニズムを解除すると結論づけます。
mainVCはTabBarItem内に表示されます。別のタブに移動してこのページに戻ると、navigationControllerの動作が復元されます。つまり、別のメールを送信するまでです。
私は正しくしていないことがあるはずです。何か案は?
他のView Controllerを(メールコントローラとは対照的に)モーダルとして表示しようとすると、何が起こるのか興味があります。 – Sam