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中无效,至少在我的用例中是如此。