的UINavigationController的addChildViewController和top

2019-09-17 03:14发布

我有类似的东西我需要显示我上面的其他视图控制器一个模式视图控制器。 我没有使用常规的模态控制器的功能( presentViewController:和朋友),因为我需要在过程中更好的控制。 代替我使用的视图控制器容纳特征(所述addChildViewController:方法组)。

该容纳特征使得代码相当简单。 当我需要出示了“模式”视图控制器,我将其添加为孩子视图控制器层次,一切都按预期工作。 一个小的缺点是,经常视图控制器被包裹在一个导航控制器。 因此,我不得不模态控制器添加为导航控制器的孩子,否则会通过导航栏和工具栏被覆盖。

现在的问题是,调用addChildViewController:导航控制器上还设置了新的控制器作为topViewController ,仿佛控制器使用常规的推pushViewController:方法。 这意味着,在显示模式控制器,它下面的常规控制器未收到外观和旋转回调。

这感觉就像一个错误,还是我失去了一些东西?

Answer 1:

我有同样的问题。 我写我自己的自定义视图控制器,包含解决了这个UINavigationController (通过添加addChildViewController:然后露出UINavigationController为只读属性。 然后,您可以添加模式视图控制器为您的新的自定义视图控制器的一个孩子,而不是作为一个孩子UINavigationController



Answer 2:

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

此方法仅用于由定制容器视图控制器的实现被调用。

所以我想这是我的错,是根本不支持这一方案。 这吮吸,因为它是非常方便的任何模式设计的东西作为普通视图控制器,并将它们连接到正确的一样一等公民的层次结构。 我可能会重写导航控制器对我自己有此内置支持。



文章来源: Interplay between UINavigationController’s addChildViewController and topViewController