首页 > 解决方案 > 根视图控制器的确切含义

问题描述

我从 Apple 官方文档Start Developing iOS Apps中阅读了以下内容:

由特定导航控制器管理的一组视图控制器称为其导航堆栈。添加到堆栈的第一项成为根视图控制器,并且永远不会从导航堆栈中弹出(删除)。

但是在 Apple View Controller Programming Guide for iOS的另一个官方文档和网上的许多其他文档中,我读到根视图控制器是根视图的控制器,第一个视图添加到窗口。

根视图控制器是视图控制器层次结构的锚。每个窗口都有一个根视图控制器,其内容填充该窗口。

那么,在导航视图控制器的情况下,导航视图控制器不应该是根视图控制器吗?为什么上面的第一个文档说它的子视图控制器是根视图控制器?我错过了什么吗?感谢您的任何解释。

标签: iosuinavigationcontroller

解决方案


你混合了两种不同的东西。如果navigation stackroot 控制器位于堆栈的根目录,但在 的情况下windowrootViewController是应用程序启动时出现的第一个视图控制器。尽管在这两种情况下您都可以更改根目录。

同样,navigationController如果您说它自己的应该是根而不是它的第一个孩子,那么您基本上是在伪造苹果的第一条陈述,这是真的,您不能弹出导航的根。Navigation Controller 不是我们常用的控制器,它就像一个容器,其中包含路由的整个控制器堆栈。你可以来回走,但不能后退rootViewController

两者都是用相同名称引用的不同事物。我认为导航的 rootViewController 以 iOS 的方式出现在窗口出现之前。虽然它的引用名称有点正确,但想要更改应用程序更改活动窗口的根的整个层次结构就像想要更改整个导航堆栈,更改导航的根一样。


推荐阅读