当我在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现在可以没有嵌套的导航控制器,但是我如何克服这个问题呢?
答案 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
。我看不出一个很好的用例。