UIViewController Containment Basics - 如何在两个并排的ViewControllers上显示全屏ViewController

时间:2012-07-20 21:58:01

标签: ipad ios5 uiviewcontroller

我有一个关于VC遏制的类似问题,它解决了我期望的最终结果,但我正在问这个假设性问题,以确定遏制的基本概念。

我有一个主控制器容器(A),它包含viewController B和viewController C. ViewController B占据了屏幕的一半,C占据了另一半。

当我按下VC B上的按钮时,我希望另一个视图控制器(D)占据整个屏幕。

我有代码显示“拆分”控制器B和C,但需要知道如何让viewController D显示。

我的问题:什么代码会让viewController D显示,以及从哪里调用?

我花了几个小时寻找涉及这种模式的问题,但无济于事。我假设VC A将负责显示它(否则它无法填满整个屏幕),VC B上的按钮将涉及VC A使用parentViewController - 但我无法让它工作

2 个答案:

答案 0 :(得分:0)

出于可重用性原因,视图控制器B和C(和D)应独立于容器视图控制器。这样,它们可以在容器视图控制器的内部和外部使用。

使用委托可以实现您的目标。在视图控制器B上创建委托属性,并将容器视图控制器(视图控制器A)设置为视图控制器B的委托。按下按钮后,向代表([self.delegate buttonPressed])发送消息,B将接收该消息。现在B可以添加另一个子视图控制器(D),它可以以您想要的任何方式呈现。

使用parentViewController可能有效,但如果您决定单独使用该视图控制器,则此属性可能为零。

答案 1 :(得分:0)

控制器B应继续拨打-presentViewController:animated:completion:上的self。此方法将从层次结构中的第一个模式提供视图控制器,从YES返回-definesPresentationContext,从接收消息的控制器开始。如果您希望控制器的视图相对于控制器A是全屏的,请覆盖该方法并返回YES

来自UIViewController documentation

  

@property(nonatomic, assign) BOOL definesPresentationContext

     

当呈现视图控制器时,iOS将从演示开始   查看控制器并询问它是否要提供演示文稿   上下文。如果呈现视图控制器未提供上下文,   然后iOS询问呈现视图控制器的父视图控制器。   iOS通过视图控制器层次结构向上搜索直到视图   controller提供演示文稿上下文。如果没有视图控制器   提供了一个上下文,窗口的根视图控制器   提供演示文稿上下文。

     

如果视图控制器返回YES,则它提供演示   上下文。窗口的一部分由视图控制器覆盖   view确定显示的视图控制器视图的大小。该   此属性的默认值为NO。