导航控制器中不允许使用UINavigationControllers

时间:2014-01-14 16:30:28

标签: ios uinavigationcontroller

当我在XCode 4中构建应用程序时,我有以下代码可以正常工作:

TestClass *tester = [[TestClass alloc]init];

NSMutableArray *nsa = [NSMutableArray array];
[nsa insertObject:tester atIndex:0];
self.navcontroller.viewControllers = nsa;
self.navcontroller.navigationBar.hidden = YES;
NSMutableArray *array = [NSMutableArray array];
[array addObject:self.navcontroller];
self.parentcontroller.viewControllers = array;

[tester release];

但是,现在当我在XCode 5中运行此代码时,收到以下错误:

UINavigationControllers are not allowed in a navigation controller!

我知道iOS7现在可以没有嵌套的导航控制器,但是我如何克服这个问题呢?

2 个答案:

答案 0 :(得分:2)

我们遇到了同样的问题。 我们有一个由UINavigationViewController(一个继承自UINavigationViewController的类)管理的应用程序的主要流程。

我们的应用程序有许多不同的流程,可以随时中止。这些流程中的每一个都由他们自己的UINavigationViewController管理(其他 继承的类...)所以我们可以在用户中止时弹出整个过程。

为了克服将UINavigationViewController推入另一个UINavigationViewController的堆栈的限制,我们这样做了:

NavVC1 : The main UINavigationViewController<br>
NavVC2 : A UINavigationViewController I want to push somewhere into NavVC1 stack<br>
VC_Host : An empty UIViewController containing NavVC2 as a child view controller.

我们将VC_Host推入NavVC1堆栈,我们得到一个嵌套的UINavigationViewController

答案 1 :(得分:0)

我认为你不应该嵌套UINavigationController,即使你以前也没有,但没有理由这样做。您可以将UINavigationController作为模式视图从另一个已在UINavigationController中的视图控制器中显示,但在另一个视图控制器中包含一个只是没有任何意义。这就是为什么不允许它。

如果你想在另一个中嵌套一个,无论出于何种原因,你可能会找到第三方开源UINavigationController替换,它不是UINavigationController本身的子类,而是使用视图控制器包含方法本身可以复制行为,然后你应该能够嵌套那些。但是你必须确保它不是UINavigationController子类,否则它仍会以同样的方式限制你。

我的最终建议是重新考虑您的用户界面,这样您就不必尝试嵌套UINavigationController。我看不出一个很好的用例。