源视图控制器与呈现视图控制器

时间:2015-05-06 16:24:24

标签: ios uiviewcontroller modalviewcontroller

我正在读一本书,声明源视图控制器不一定是呈现视图控制器。源VC是调用 presentViewController:... 方法的源,并且呈现VC(它的视图)是被呈现的VC视图模糊的那个。我想不出一个例子,其中呈现的VC与源VC不同。请提供一些。感谢

书中的文字:

原始演示者: 提供了presentViewController:animated:completion:的视图控制器。 Apple有时会将此视图控制器称为源; “原创主持人”是我自己的用语。 呈现的视图控制器被设置为原始演示者的presentsViewController。

呈现视图控制器: 呈现的视图控制器呈现ViewController。这是视图控制器,其视图被呈现的视图控制器视图替换或覆盖。默认情况下,视图控制器的视图是整个界面 - 即根视图控制器或已存在的视图控制器。它可能与原始演示者不同。 呈现的视图控制器被设置为呈现视图控制器的presentViewController。因此,呈现的视图控制器可能是两个不同视图控制器的presentViewController。“

2 个答案:

答案 0 :(得分:4)

在了解视图控制器转换时,我问自己同样的问题,特别是在尝试从animationControllerForPresentedController:presentingController:sourceController:协议中理解UIViewControllerTransitioningDelegate方法时。斗争是关于presentingControllersourceController论点之间的差异。

我在View Controller Programming Guide找到了答案。您可以在模拟显示视图控制器部分中找到以下内容:

  

调用的视图控制器   presentViewController:animated:completion:方法可能不是那个   实际上执行模态演示。演示风格   确定如何呈现视图控制器,包括   呈现视图控制器所需的特征。对于   例如,必须通过全屏启动全屏演示   查看控制器。如果当前呈现的视图控制器不是   合适的,UIKit遍历视图控制器层次结构,直到找到它为止   那是。完成模态演示后,UIKit会更新   presentViewController和presentsViewController的属性   受影响的视图控制器。

这意味着'源'视图控制器概念不是您提到的书的作者随机创建的。

答案 1 :(得分:0)

我害怕你正在阅读的这本书可能通过将所谓的源视图控制器添加到整个名称组合中而使复杂的主题变得更加复杂。

对于初学者来说,没有这样一个" Source"在视图控制器中。在谈到Container View Controllers时,您只有parentViewControllerchildViewControllers 。在谈到presenting View Controllers modally时,您只有presentingViewControllerpresentedViewController

您还拥有视图控制器,其主要目的是管理其他视图控制器,即导航控制器,标签栏控制器,拆分视图控制器和弹出式演示控制器。因此,任何给定的视图控制器都可以查询自己以了解它是否已附加"例如,导航控制器。

我猜你的书暗示的是,一个源VC会让另一个VC出现在屏幕上。从这个意义上说,这是对的。 "来源"可能与呈现VC不同。拿这个片段:

[self presentViewController:aViewController animated:YES completion:nil];

在上面的示例中,呈现VC也是"源" VC。但是在这里:

[someViewController presentViewController:anotherViewController animated:YES completion:nil];

我们正在某个VC上调用该方法,并将另一个VC作为参数传递。因此,在这种情况下,呈现VC someViewController呈现VC anotherViewController。如果这行代码在第三个VC中,那么所说的第三个VC将是" source"。

但事情就是这样!最后一段代码甚至可能不在视图控制器中,所以考虑一下有点奇怪&# 34;来源风险投资"。