MonoTouch的UIViewControllerHierarchyInconsistency异常

问题描述:

我已经使用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的例子,它们看起来都像是使用子视图路线,这没有帮助。有任何想法吗?

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,因为它似乎违反了预期的用途。我使用导航控制器上的工具栏来显示选项并允许切换。 –