4

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

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

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

这感觉像是一个错误,还是我错过了什么?

4

2 回答 2

3

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

于 2012-07-19T14:39:46.200 回答
1

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

此方法仅供自定义容器视图控制器的实现调用。

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

于 2012-05-09T09:17:44.540 回答