UINavigationController的addChildViewController和topViewController之间的相互作用

时间:2012-05-09 09:02:22

标签: objective-c ios cocoa-touch uinavigationcontroller

我有一些像模态视图控制器,我需要在我的其他视图控制器上方显示。我没有使用常规模态控制器功能(presentViewController:和朋友),因为我需要更好地控制该过程。相反,我使用视图控制器包含功能(addChildViewController:方法组)。

包含功能使代码非常简单。当我需要呈现“模态”视图控制器时,我将它作为子项添加到视图控制器层次结构中,一切都按预期工作。一个小问题是常规视图控制器包含在导航控制器中。因此,我必须将模态控制器添加为导航控制器的子项,否则它将被导航栏和工具栏覆盖。

现在的问题是,在导航控制器上调用addChildViewController:也会将新控制器设置为topViewController,就像使用常规pushViewController:方法推送控制器一样。这意味着当显示模态控制器时,它下面的常规控制器不会接收外观和旋转回调。

这感觉就像一个错误,或者我错过了什么?

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。我通过编写自己的自定义视图控制器解决了这个问题,该控制器包含UINavigationController(通过addChildViewController:添加),然后将UINavigationController公开为readonly属性。然后,您可以将模态视图控制器添加为新自定义视图控制器的子项,而不是UINavigationController

的子项

答案 1 :(得分:1)

我在addChildViewController:

的文档中错过了这句话
  

此方法仅用于执行a   自定义容器视图控制器。

所以我猜这是我的错,而这种情况根本不受支持。这很糟糕,因为将常规视图控制器设计成任何模态的东西并将它们像正确的一等公民一样连接到层次结构是非常方便的。我可能不得不自己重写导航控制器以获得内置支持。