2014-01-14 31 views
2

當我在XCode中4構建應用程序允許,我有以下的代碼工作得很好:UINavigationControllers不是在導航控制器

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

我不認爲你曾經應該嵌套UINavigationController s,即使你以前可以,也沒有理由這樣做。您可以將UINavigationController作爲來自另一個視圖控制器的模態視圖呈現,該視圖控制器已經在UINavigationController中,但是在另一視圖控制器中包含另一視圖控制器卻沒有任何意義。這就是爲什麼它不被允許。

如果你想要一個嵌套在另一個,無論出於什麼原因,你也許可以找到一個第三方的開源UINavigationController替代品,不是UINavigationController本身的子類,而是使用它自己的視圖控制器遏制方法複製行爲,然後你應該能夠嵌套這些。但是您必須確定它不是UINavigationController子類,否則它仍會以相同的方式限制您。

我的最終建議是重新考慮你的用戶界面,這樣你就不必嘗試嵌套UINavigationController s。我看不到一個很好的用例。

+0

有些情況下,這可能是有道理的,特別是當你處理更多屏幕房地產如iPad。 – nickthedude

1

我們遇到了同樣的問題。 我們擁有由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

+0

所以你說有可能將導航控制器嵌套在導航控制器中? –

+0

因爲我一直在試圖實現這一段時間 –

+0

是的,你需要一個UIVIewController作爲嵌套的UINavigationViewController的父節點。 然後將UIViewController推送到外部UINavigationViewController。 – Skulas