2011-10-21 22 views
2

我已經使用MonoTouch 2.8和其他相關更新升級到iOS 5。我有一個UIViewController,其中有一個UITabBarController,併爲其配置了兩個不同的XIB。在UITabBarController上也有一個插座。我在做什麼在viewDidLoad中是MonoTouch的UIViewControllerHierarchyInconsistency異常

this.View = this.TabBar.View; 
在升級到iOS 5我得到在標籤欄的意見UIViewControllerHierarchyInconsistency例外

現在。我可以做

this.View.AddSubview(this.TabBar.View); 

this.View.Add(this.TabBar.View); 

和異常停止發生。麻煩的是,我的標籤欄位於屏幕的底部,只有部分圖像可見,而您看不到關聯的文本。在搜索中,我找到了一些Objective-C的例子,它們看起來都像是使用子視圖路線,這沒有幫助。有任何想法嗎?

回答

3

iOS4中支持的模式是一個壞主意:您通過抓取內部(視圖控制器的視圖屬性)連接視圖控制器並將其添加到另一個視圖控制器的視圖層次結構中。這不僅醜陋,而且提出了關於視圖層次結構的各種問題。

儘管Apple仍支持基本模式,但不再支持任何高級用戶,並且您需要使用新的viewcontroller包含設置。現在將這些無效用途作爲例外提出。

在WWDC 2011演示文稿中,查看會話102 - 「實現UIViewController Containment」。

的主要變化,爲您的主視圖控制器,將佔據整個屏幕的一個,你改變了舊:

window.AddSubview (myViewController.View); 

要:

window.RootViewController = myViewController 

對於其他人,你用新的API:

currentContainer.AddChildViewController (myOtherViewController); 

在你的情況,你添加一個新的ViewController到你的標籤,所以你會d Ø像這樣添加您的視圖控制器的第一個標籤:

myTabBar.ViewControllers [1].AddChildViewController (myFancyController) 
+0

我覺得我的問題的一部分,可能是我試圖使用的UITabBarController主窗口之外,我不認爲這是支持。我想在應用程序中有一個內部頁面,而頁面本身沒有標籤。這就是我設置這個的原因.View = this.TabBar.View讓我可以在內頁上看到標籤欄。最近的一些閱讀讓我覺得標籤欄不允許像我正在嘗試的那樣使用。任何想法,如果這是正確的?感謝您的指導。 –

+0

對,您可能需要使用PresentModalViewController而不是將它分配給一個窗口。 –

+0

我結束了內部的UITabBarController,因爲它似乎違反了預期的用途。我使用導航控制器上的工具欄來顯示選項並允許切換。 –

相關問題