0

我在 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 上工作。我想解雇的那些模态视图控制器不会被解雇。相反,它显示了这个错误。

尝试关闭其视图当前未出现的模态视图控制器。自我 = UINavigationController:0xa947440 modalViewController = UINavigationController:0x8c36170

但是当我尝试使用 presentModalViewController 呈现该视图控制器时,它会显示

警告:尝试在 UINavigationController:0xa947440 上呈现,它已经在呈现 UINavigationController:0x8c36170

请建议我该怎么做以及如何为 ios6 解决此问题。

4

2 回答 2

1

从您的问题中不清楚哪个 VC 提供了您想要解雇的 VC。但是,我建议始终遵循此规则:

从也提出它的 VC 中解散。因此,例如,如果 VC0 呈现 VC1,那么也会从 VC0 中消除 VC1。这实际上也是 Apple 推荐的方式,您可以从此处打开和关闭其他 UIViewControllers 的一个非常相关的问题的答案中看到 - 除了使用协议和委托之外还有其他方法吗?

于 2012-09-29T06:53:05.787 回答
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];
于 2012-11-29T10:26:28.907 回答