Ios5 self.presentingViewController返回UITabBarController,而不是使用presentModalViewController推送它的视图控制器

Ios5 self.presentingViewController返回UITabBarController,而不是使用presentModalViewController推送它的视图控制器,ios5,uitabbarcontroller,Ios5,Uitabbarcontroller,我有一个基于选项卡的应用程序。其中一个视图正在推送一个模态视图控制器。如果在模式视图控制器中调用self.presentingViewController,它将返回选项卡栏控制器,而不是推送它的视图控制器 我错过了什么?是否有可靠的方法返回视图控制器提升模式 谢谢。来自苹果的文档: 此属性的默认实现在视图中向上移动 层次结构,从该视图控制器开始。第一种观点 它发现接收到 presentViewController:动画:完成:方法,或具有 设置为“是”的DefinePresentationCon

我有一个基于
选项卡的应用程序。其中一个
视图
正在推送一个
模态视图控制器
。如果在
模式视图控制器中调用
self.presentingViewController
,它将返回
选项卡栏控制器
,而不是推送它的
视图控制器

我错过了什么?是否有可靠的方法返回
视图控制器
提升模式


谢谢。

来自苹果的文档:

此属性的默认实现在视图中向上移动 层次结构,从该视图控制器开始。第一种观点 它发现接收到 presentViewController:动画:完成:方法,或具有 设置为“是”的DefinePresentationContext属性将作为 财产的价值。它不断向上移动,直到 查找要返回的值或将其返回到根视图控制器

因此,即使另一个视图控制器推送了它,该视图控制器的视图也被模式视图覆盖。它们沿着层次结构向上移动,直到它找到一个视图控制器,该视图控制器的视图没有被遮挡,或者将
definesPresentationContext
设置为YES,或者直到它到达根视图控制器,在您的情况下,根视图控制器就是选项卡栏控制器


我想说,演示视图控制器需要将
definesPresentationContext
设置为YES,以回答您关于如何返回演示模式视图控制器的问题。

这是iPhone应用程序吗?如果是这样的话,这就解释了困惑。在iPhone上,唯一的显示样式是
UIModalPresentationFullScreen
——这意味着在iPhone上,根视图控制器始终是显示视图控制器。在选项卡栏界面中,UITabBarController的视图是根视图控制器

您会注意到,在iPhone上,模态视图并没有取代视图控制器的视图;它将替换整个界面,这意味着它将替换选项卡栏控制器的视图。这是因为选项卡栏控制器实际上是显示视图控制器

我猜在iPhone上,您真的不应该将
presentViewController:
presentModalViewController:
发送到选项卡栏控制器包含的视图控制器。您应该将其发送到选项卡栏控制器。因此,消息将为您路由到选项卡栏控制器


因此,
presentingViewController
的值不会发生任何有趣的事情,除非你在iPad上。在iPad上,您可以使模态视图替换视图控制器的视图。为此,模态视图的
modalPresentationStyle
必须是
UIModalPresentationCurrentContext
。在这种情况下,它的
presentingViewController
实际上可以是“推动模态视图控制器”的视图。

非常感谢在正确方向上的观点。但是,
definesPresentationContext
没有任何区别。UITabBar仍在响应,我认为这是因为它接收到
presentViewController:animated:completion:
。我不得不向app delegate注册视图控制器并以这种方式引用它。我认为答案可能是parentViewController,我发现它在iOS 8中有效,但在iOS 7中无效,至少在我的用例中是如此。