2010-12-01 49 views
0

好吧,这里的情况是:我有一个导航控制器(NC)和两个子ViewControllers(childVC1-childVC2)的主ViewController(mainVC)。MFMailComposeViewController打破导航控制器的行为

NC的导航栏获取在viewWillAppear中被调用的mainVC隐藏:
- (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通过presentModalViewController方法称为从任何一个孩子的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];
}

现在邮件的viewController被驳回(SE NT邮件),我们在子ViewController。

此时如果我们点击导航栏上的返回按钮以返回到mainVC,导航栏不会隐藏。因为mainVC上的方法viewWillAppear没有被调用。

我试图通过在子视图内引入导航控制器的委托实现工作,从而隐藏了NavBar并在邮件视图控制器(发送的邮件)被取消后弹出子视图。

它似乎有窍门,但如果我立即推动任何子视图(emailer childVC1或其他平坦的childVC2),然后通过上述操作(发送邮件,隐藏NavBar和流行子视图)后退按钮,导航栏不会再次隐藏!因为mainVC上的viewWillAppear方法还没有被调用。子VC的viewWillDisappear也不会被调用。

我得出结论,通过从任何子viewController通过presentModalViewController方法调用邮件视图控制器,我以某种方式破坏导航控制器的导航机制。

请注意,mainVC显示在TabBarItem中。如果我转到另一个选项卡并返回到此选项,navigationController的行为将被恢复 - 直到我发送另一封邮件。

必须有一些我做得不好的东西。有任何想法吗?

+0

我很想看看当您尝试将另一个视图控制器作为模式(而不是邮件控制器)时会发生什么。 – Sam 2010-12-01 09:06:51

回答

1

你有没有尝试把隐藏代码放入viewDidAppear而不是viewWillAppear?

+0

感谢您的回复。刚刚尝试过。不幸的是没有帮助。 – BoraOku 2010-12-01 08:35:34