pushViewController 和 showViewController 的区别

Posted

技术标签:

【中文标题】pushViewController 和 showViewController 的区别【英文标题】:Difference between pushViewController and showViewController 【发布时间】:2015-02-13 11:49:31 【问题描述】:

UINavigationController 上的 pushViewController 和 showViewController 方法有什么区别?

【问题讨论】:

【参考方案1】:

Show segue 可以与导航控制器一起使用,它们只是将 viewControllers 推送到您的堆栈上。

Show detail segue 仅对拆分视图控制器有意义。由于您的拆分视图控制器中有两个视图控制器,您可以:

通过使用 Show segue 呈现(推送,因为默认项目使用 navigationVC 作为主 VC)视图控制器在您的主视图控制器中导航 使用 Show detail segue 在您的详细视图控制器中显示详细信息 如果您不知道拆分视图控制器是如何组成的:

**************++++++++++++++++++
*            *                 +
*            *                 +
*   master   *      detail     +
*    view    *       view      +
* controller *    controller   +
*            *                 +
*            *                 +
**************++++++++++++++++++

但是!

在 iPhone 上是这样显示的(iPhone6+ 横向除外)

****************
*++++++++++++++*
*+            +*
*+            +*
*+            +*
*+   detail   +*
*+    view    +*
*+ controller +*
*+            +*
*+            +*
*++++++++++++++*
****************

ShowsegueShow detail segue 都是 ios8Xcode6 的新成员,它们被称为 adaptative segues,它们的行为因设备类型或方向而异。

基本上,Show segue 和 Show detail segue 似乎在 iPhone 上做同样的事情,因为没有太多空间可以并排显示视图控制器。

从技术上讲,您不会多次展示详细信息,直到您返回导航。只有主视图控制器应该执行 Show detail segues,详细视图控制器应该是导航树中的叶子(但不禁止使用 navigationVC 作为叶子;))

希望对你有帮助。

【讨论】:

您的回答中似乎有什么我不明白的地方。 OP 要求 pushViewControllershowViewController。你在哪里说pushViewController?我只能看到你在比较“show segue”和“show detail segue”... 你看到我的评论了吗? @Honey 这有点不清楚,但重要信息实际上在答案的第一行。套用一句话:显示来自导航控制器的视图控制器将简单地将视图控制器到堆栈上。导航控制器和拆分视图控制器都覆盖show 函数并以不同的方式处理视图控制器的呈现。对于导航视图控制器,它是 similar to 和 push 这很难理解【参考方案2】:

您可以使用此方法将显示视图控制器的需求与实际在屏幕上显示该视图控制器的过程分离。

使用这种方法,视图控制器不需要知道它是嵌入在导航控制器还是拆分视图控制器中。它为两者调用相同的方法。 UISplitViewController 和 UINavigationController 类覆盖此方法并根据其设计处理表示。例如,导航控制器覆盖此方法并使用它将 vc 推送到其导航堆栈。

表格Apple UIKit Documentation

【讨论】:

以上是关于pushViewController 和 showViewController 的区别的主要内容,如果未能解决你的问题,请参考以下文章

pushViewController 和 showViewController 的区别

popViewController 和 pushViewController 动画

pushViewController和presentViewController的区别

presentViewController pushViewController和presentModalViewController

presentViewController pushViewController和presentModalViewController

PushViewController & 设置导航栏颜色和标题