Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone MFMailComposeViewController中断导航控制器';行为_Iphone_Objective C_Sdk - Fatal编程技术网

Iphone MFMailComposeViewController中断导航控制器';行为

Iphone MFMailComposeViewController中断导航控制器';行为,iphone,objective-c,sdk,Iphone,Objective C,Sdk,好的,情况是这样的:我有一个主视图控制器(mainVC)和一个导航控制器(NC)以及两个子视图控制器(childVC1-childVC2) 当在mainVC上调用ViewWillDisplay时,NC的导航栏将隐藏: -(void)视图将出现:(BOOL)动画{ [self.navigationController setnavigationbar隐藏:真动画:动画];} 在通过NC在mainVC上推送任何子视图之前,将显示导航栏: mainVC*childVC1=[[childVControl

好的,情况是这样的:我有一个主视图控制器(mainVC)和一个导航控制器(NC)以及两个子视图控制器(childVC1-childVC2)

当在mainVC上调用ViewWillDisplay时,NC的导航栏将隐藏:
-(void)视图将出现:(BOOL)动画{

[self.navigationController setnavigationbar隐藏:真动画:动画];}

在通过NC在mainVC上推送任何子视图之前,将显示导航栏:
mainVC*childVC1=[[childVController1 alloc]initWithNibName:@“childVController1”bundle:nil]
[self.navigationController setNavigationBarHidden:FALSE动画:TRUE]
[self.navigationController-pushViewController:childVC1-animated:YES]
[childVC1发行版]

当通过导航栏上的标准后退按钮弹出任何子视图后调用导航栏时,导航栏将通过mainVC的ViewWillDisplay再次隐藏

在MFMailComposeViewController(通过presentModalViewController方法从任何子viewController调用标准邮件viewController)之前,所有操作都会顺利进行:
-(void)sendMail{

MFMailComposeViewController*picker=[[MFMailComposeViewController alloc]init];

picker.mailComposeDelegate=self;

[picker setSubject:[NSString stringWithFormat:@“Subject”];

NSString-emailBody=[NSString-stringWithFormat:@“邮件正文”];

[picker setMessageBody:emailBody isHTML:NO];

[picker setToRecipients:[NSArray arrayWithObject:@“john。appleseed@apple.com“]];

如果(选择器!=nil){

[自我呈现Modalviewcontroller:picker动画:是];

[picker release];

}其他{

NSLog(@“未配置电子邮件”);

}

}

-(void)mailComposeController:(MFMailComposeViewController)控制器未完成结果:(mfmailcomposesult)结果错误:(NSError*)错误{

[自我解除ModalViewController激活:是];

}

现在,mail viewController被解除(已发送邮件),我们在子viewController上

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

我试图通过在子视图中为导航控制器引入一个委托来实现一种变通方法,从而隐藏导航栏,并在解除邮件视图控制器(sent mail)后弹出子视图

它似乎做到了这一点,但在执行上述操作(发送邮件、隐藏导航栏和弹出子视图)后,如果我立即按下任何子视图(emailer childVC1或另一个相当平淡的childVC2),然后通过“后退”按钮将其弹出,则导航栏不会再次隐藏!因为mainVC上的
视图将出现
方法仍然没有被调用
VIEW将消失
on childvC也不会被调用

我的结论是,通过从任何子viewController通过
presentModalViewController
方法调用mail viewController,我以某种方式破坏了navigationController的导航机制

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


一定有什么事我做得不对。有什么想法吗?

您是否尝试将隐藏代码放在ViewDidDisplay而不是ViewWillDisplay中?

谢谢您的回复。我试过了。不幸的是,没有帮助。我想看看当您尝试将另一个视图控制器作为模态(与邮件控制器相反)呈现时会发生什么