3

我有一个关于 VC 遏制的类似问题,它解决了我想要的最终结果,但我提出这个假设性问题是为了确定遏制的基本概念。

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

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

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

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

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

4

2 回答 2

0

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

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

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

于 2012-07-20T22:07:59.497 回答
0

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

UIViewController文档中:

@property(nonatomic, assign) BOOL definesPresentationContext

当一个视图控制器被呈现时,iOS 从呈现视图控制器开始并询问它是否想要提供呈现上下文。如果呈现视图控制器不提供上下文,则 iOS 会询问呈现视图控制器的父视图控制器。iOS 向上搜索视图控制器层次结构,直到视图控制器提供表示上下文。如果没有视图控制器提供上下文,则窗口的根视图控制器提供表示上下文。

如果视图控制器返回 YES,那么它会提供一个表示上下文。由视图控制器的视图覆盖的窗口部分决定了呈现的视图控制器视图的大小。此属性的默认值为 NO。

于 2012-07-20T22:54:36.587 回答