【问题标题】:UIViewControllerHierarchyInconsistency Exception with MonoTouchMonoTouch 的 UIViewControllerHierarchyInconsistency 异常
【发布时间】:2011-10-21 06:10:27
【问题描述】:

我已经升级到带有 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 示例,它们看起来都在使用子视图路由,这没有帮助。有什么想法吗?

【问题讨论】:

    标签: exception xamarin.ios uitabbarcontroller ios5


    【解决方案1】:

    iOS4 中支持的模式是个坏主意:您通过获取内部(视图控制器的 View 属性)连接视图控制器并将其添加到另一个视图控制器的视图层次结构中。这不仅丑陋,而且引发了关于视图层次结构的各种问题。

    虽然 Apple 仍然支持基本模式,但不再支持任何高级用户,您需要使用新的 viewcontroller 包含设置。这些无效用途现在作为例外提出。

    在 WWDC 2011 演示文稿中,查找 Session 102 - “Implementing UIViewController Containment”。

    主要的变化是,对于你的主视图控制器,占据整个屏幕的控制器,你改变了旧的:

    window.AddSubview (myViewController.View);
    

    收件人:

    window.RootViewController = myViewController
    

    对于其他人,您使用新的 API:

    currentContainer.AddChildViewController (myOtherViewController);
    

    在您的情况下,您正在将一个新的 ViewController 添加到您的选项卡,因此您可以执行以下操作来将您的视图控制器添加到第一个选项卡:

    myTabBar.ViewControllers [1].AddChildViewController (myFancyController)
    

    【讨论】:

    • 我认为我的部分问题可能是我试图在主窗口之外使用 UITabBarController,我认为它不受支持。我想在应用程序中有一个包含选项卡的内部页面,而主页本身没有。这就是我设置 this.View = this.TabBar.View 的原因,以便我可以获得内部页面上的标签栏。最近的一些阅读让我认为标签栏不允许像我试图做的那样使用。知道这是否正确吗?感谢您的指导。
    • 对,您可能需要使用 PresentModalViewController 而不是将其分配给窗口。
    • 我结束了取出内部 UITabBarController ,因为它似乎违背了预期用途。我使用导航控制器上的工具栏来显示选项并允许切换。
    • @miguel.de.icaza - 当您说 iOS 4 中支持的模式时,它是由苹果公司记录的,还是您的意思是它似乎在大多数情况下都有效?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2019-03-06
    • 2012-05-19
    相关资源
    最近更新 更多