2010-12-01 3 views
0

ここで状況は次のとおりです。ナビゲーションコントローラ(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の動作が復元されます。つまり、別のメールを送信するまでです。

私は正しくしていないことがあるはずです。何か案は?

+0

他のView Controllerを(メールコントローラとは対照的に)モーダルとして表示しようとすると、何が起こるのか興味があります。 – Sam

答えて

1

viewWillAppearの代わりにviewDidAppearの中に非表示のコードを入れてみましたか?

+0

応答をありがとう。ちょうどそれを試みた。残念ながら助けてくれませんでした。 – BoraOku

関連する問題