将模态视图控制器添加到父子视图控制器层次结构

Posted

技术标签:

【中文标题】将模态视图控制器添加到父子视图控制器层次结构【英文标题】:Adding modal view controller to parent-child view controller hierarchy 【发布时间】:2012-05-15 17:33:28 【问题描述】:

我发布了一个没有回应的相关问题,但在这里我将不那么狭窄。基本上,我正在使用一段开源代码来实现一个 facebook 风格的幻灯片来显示类型视图。其实现依赖于一种模式,其中初始滑动视图控制器是应用程序窗口启动时的根视​​图控制器。然后它允许每个视图控制器通过这个方便的方法获得对该滑动视图控制器的引用:

- (ECSlidingViewController *)slidingViewController

  UIViewController *viewController = self.parentViewController;
  while (!(viewController == nil || [viewController isKindOfClass:[ECSlidingViewController class]])) 
    viewController = viewController.parentViewController;
  

  return (ECSlidingViewController *)viewController;

我认为这就是我的问题所在。我想为我以模态方式呈现的视图控制器提供这种侧滑式菜单。但是模态呈现的视图控制器为它的父视图控制器返回 null。因此,当我尝试获取对该根视图控制器(初始滑动视图控制器)的引用时,我做不到。如果我推动视图控制器,它可以工作,但这不是我想要的应用程序的流程。我认为如果我可以将此模态视图控制器添加为呈现视图控制器的子级,它将起作用。但是当我尝试这样做时,我遇到了一个异常,我正在模态地呈现一个已经处于活动状态的视图控制器。谁能建议如何解决这个问题?

编辑:Here's 我正在尝试做的事情的一个例子。

【问题讨论】:

您能否以图形或字面的形式给出您的视图流..以及您想要执行的操作..当您并排引用时等等..它模棱两可 为歧义道歉。添加了指向我所说的滑动到侧面的图像的链接。 【参考方案1】:

从我们的讨论中,可以推断它是一个基于视图的应用程序。因此,您必须根据要求从父视图中添加和删除子视图,为此您将创建一个跟踪视图。此外,您可以将其添加为子视图,而不是模态显示视图,例如:-

[self.view addSubView:viewController.view];

您可以使用bringSubViewToFront 将其带到顶部。请参阅此Link to manage it

【讨论】:

不,我很抱歉,但不是这样。这适用于 iPhone,而不是 iPad。而且行为不同。两个视图控制器被初始化,一个在另一个之上。平移手势将顶视图控制器移到一边,露出下面的那个。在 facebook 应用程序(示例图像)中,当您在左侧看到该菜单时,这是将顶部视图控制器向右滑动以显示下方菜单视图控制器的结果。【参考方案2】:

我最终使用这个工具来达到同样的效果,并且发现实现起来要简单得多。 http://cocoacontrols.com/controls/iiviewdeckcontroller

【讨论】:

以上是关于将模态视图控制器添加到父子视图控制器层次结构的主要内容,如果未能解决你的问题,请参考以下文章

在切换期间关闭模态 UIViewController

将滚动视图添加到集合视图层次结构

如何从任何其他视图控制器获取具有视图控制器详细信息的视图层次结构?

将视图添加到窗口层次结构

如何在不将控制器添加到视图层次结构并使其可见的情况下从 UIViewController 获取 UIView?

UIViewController 的视图层次结构