在iOS 5中取消UINavigationController

3

我的问题似乎有点奇怪,我有一个自定义的UITarBar,它管理着几个UINavigationController,其中包含一个UIViewController,该视图控制器在UITabBar按钮touchUpInside时以模态方式呈现这些NavControllers。因此,在iOS 5中,我的应用由于dismissModalViewControllerAnimated:方法而崩溃...如果将dismiss方法更改为iOS 5上的新方法(dismissViewControllerAnimated:completion:),它将无法解除NavController。下面是一些代码,展示了我如何更改控制器:

- (void) changeController
{   
    if ([self.generalViewController respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) {
        [self.generalViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
    } else {
        [self.generalViewController dismissModalViewControllerAnimated:NO];
    }
    [self.anotherNavController.view addSubview:customTabBar];
if ([self.generalViewController respondsToSelector:@selector(presentViewController:animated:completion:)]) {
        [self.generalViewController presentViewController:anotherNavController animated:NO completion:nil];
    } else {
        [self.generalViewController presentModalViewController:anotherNavController animated:NO];   
    }

所有内容都在AppDelegate中管理。提前感谢您的帮助。

编辑:我在这篇文章dismissModalViewControllerAnimated: (and dismissViewControllerAnimated) crashing in iOS 5中找到了一些信息,按照他所做的(用动画呈现第一个viewControllerAnimated)然后像我以前对新的presentViewController选择器检查一样,一切在模拟器上正常工作但是在设备上却不行...


你的第一个条件测试是 generalViewController 是否响应了该选择器。如果评估为 true,则将此消息发送到 presentingViewController? - Geoffroy
是的,因为我一直在阅读,在iOS 5中这是正确的做法。 - Herz Rod
1
如果你想让同一个应用在iOS 4.x及更早版本上运行,那么这个检查是必要的;如果你只针对iOS 5进行开发,那么就不需要进行检查。 - benzado
1个回答

0

我对你的前几行不太确定,认为第一行可能需要更改:

 if ([self.generalViewController respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) {
    [self.generalViewController dismissViewControllerAnimated:YES completion:nil];

在上面的代码中,第二行有一个不必要的.presentingViewController。我看到你在上面的评论中谈到了它的理由,但你是否尝试过另一种替代方法呢?

无论如何,我在升级至iOS 5时遇到了类似的问题,并发现解决方案是直接发送解除命令,如下所示:

 [self dismissViewControllerAnimated:YES];

我建议你试一下。这对我有用,在iOS 4.2上运行代码时仍然有效...

编辑:更正,我正在更正的是dismissModalViewControllerAnimated。然而,在那种情况下,我发现只向self发送消息而不是针对一个视图控制器可以解决无法关闭视图的问题,并且在iOS 4和5中都有效... 可以试试。


实际问题与控制器的解除方式无关,有点难以解释,因为它甚至与我的原始问题无关,但感谢您的意见。 - Herz Rod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接