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

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

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

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

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

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

我在addChildViewController:的文档中错过了这句话addChildViewController:

此方法仅用于通过自定义容器视图控制器的实现来调用。

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