我有一个关于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 - 但我无法让它工作
答案 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。