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

时间:2011-12-08 21:26:17

标签: ios5 uitabbarcontroller

我有一个基于tab的应用程序。其中一个views正在推动modal view controller。如果我在self.presentingViewController内拨打modal view controller,则会返回tab bar controller,而不是推送它的view controller

我在这里缺少什么?是否有可靠的方法来返回view controller提升模式?

感谢。

2 个答案:

答案 0 :(得分:12)

这是一款iPhone应用吗?如果是这样,那就解释了混乱。在iPhone上,唯一的演示风格是UIModalPresentationFullScreen - 相当于在iPhone上说,根视图控制器始终是呈现视图控制器。好吧,在标签栏界面中,UITabBarController的视图是根视图控制器。

你会注意到在iPhone上,模态视图不会取代视图控制器的视图;它取代了整个界面,这意味着它取代了标签栏控制器的视图。这是因为标签栏控制器确实 呈现视图控制器。

我猜你在iPhone上确实不应该将presentViewController:presentModalViewController:发送到标签栏控制器所包含的视图控制器。您应该将其发送到标签栏控制器。因此,消息将被路由到标签栏控制器。

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

答案 1 :(得分:3)

来自Apple的文档:

  

此属性的默认实现向上查看   层次结构,从此视图控制器开始。第一个观点   控制器发现收到了   presentViewController:animated:completion:方法,或者有它的   设置为YES的definesPresentationContext属性作为返回   财产的价值。它一直向上走,直到它   找到要返回的值或者它到达根视图控制器。

因此,即使其他视图控制器推动它,该视图控制器的视图也会被模态视图覆盖。它们沿层次结构向上走,直到找到一个视图控制器没有遮挡其视图,或者definesPresentationContext设置为YES,或者直到它到达根视图控制器(在您的情况下是Tab Bar Controller)。

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