我在ios6中遇到了关于解雇modalViewController的问题
以下是我分享的代码段:
UIViewController *controller=appdelegate.navigationController.topViewController;
if(kDeviceVersion>=5.0){
if(controller.parentViewController){
if(controller.parentViewController.parentViewController){
[controller.parentViewController.parentViewController dismissViewControllerAnimated:NO completion:nil];
}
[controller.parentViewController dismissViewControllerAnimated:NO completion:nil];
}
}
else{
if(controller.parentViewController){
if(controller.parentViewController.parentViewController){
[controller.parentViewController.parentViewController dismissModalViewControllerAnimated:NO];
}
[controller.parentViewController dismissModalViewControllerAnimated:NO];
}
}
此代码在ios4.0到ios 5.1.1上运行良好。但未能在ios6上工作。 那些我想解雇的模态视图控制器并没有被解雇。而是显示此错误。
尝试关闭当前未显示视图的模式视图控制器。 self = UINavigationController:0xa947440 modalViewController = UINavigationController:0x8c36170
但是当我尝试使用presentModalViewController呈现该视图控制器时,它显示
警告:尝试在UINavigationController上呈现:0xa947440已经呈现UINavigationController:0x8c36170
请建议我为ios6做什么以及如何解决此问题。
答案 0 :(得分:1)
从你的问题中不清楚哪个VC呈现你要解雇的VC。但是,我建议始终遵循这条规则:
从提出它的VC中解雇。因此,例如,如果VC0呈现VC1,那么也从VC0中解除VC1。这也是Apple推荐的方式,您可以在此处查看一个非常相关的问题的答案opening and closing other UIViewControllers - any other approaches than to use protocol & delegate?
答案 1 :(得分:0)
我没有使用模态视图控制器,而是使用导航控制器并使用CAAnimation而不是现有的模态视图控制器来推送视图
而不是这个-----
ShareViewController *share=[[ShareViewController alloc] initWithNibName:@"ShareViewController" bundle:nil];
UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:share];
share.modalPresentationStyle=UIModalPresentationFormSheet;
share.modalTransitionStyle=UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:nav animated:YES];
[share release];
[nav release];
我们可以使用这个
ShareViewController *share=[[ShareViewController alloc] initWithNibName:@"ShareViewController" bundle:nil];
CATransition* transition = [CATransition animation];
transition.duration = 0.4;
transition.type = kCATransitionFade;
transition.subtype = kCATransitionFromTop;
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
[self.navigationController pushViewController:share animated:NO];
[share release];