我已使用MonoTouch 2.8和其他相关更新升级到iOS 5。我有一个UIViewController,里面有一个UITabBarController,为视图配置了两个不同的XIB。在UITabBarController上也有一个插座。我在ViewDidLoad中所做的是
this.View = this.TabBar.View;
现在升级到iOS 5后,我的标签栏中的视图会出现UIViewControllerHierarchyInconsistency异常。我能做到
this.View.AddSubview(this.TabBar.View);
或
this.View.Add(this.TabBar.View);
并且异常停止发生。但问题是我的标签栏位于屏幕底部,只有部分图像可见,您无法看到相关文本。在搜索过程中,我发现了一些Objective-C示例,这些示例看起来都像是使用子视图路径,这没有用。有什么想法吗?
答案 0 :(得分:3)
iOS4中支持的模式是一个坏主意:通过抓取内部(视图控制器的View属性)并将其添加到另一个视图控制器的视图层次结构来连接视图控制器。这不仅是丑陋的,而且引发了关于视图层次结构的各种问题。
虽然Apple仍支持基本模式,但不再支持任何高级用户,您需要使用新的viewcontroller包含设置。现在将这些无效用途引发为例外。
在WWDC 2011演示文稿中,查找会话102 - “实现UIViewController遏制”。
对于您的主视图控制器来说,主要的变化是占用整个屏幕的那个,你改变旧的:
window.AddSubview (myViewController.View);
要:
window.RootViewController = myViewController
对于其他人,您使用新的API:
currentContainer.AddChildViewController (myOtherViewController);
在您的情况下,您正在向选项卡添加新的ViewController,因此您可以执行以下操作,将视图控制器添加到第一个选项卡:
myTabBar.ViewControllers [1].AddChildViewController (myFancyController)