在今天开始开发iOS应用程序'它指出,#34;添加到[导航]堆栈的第一个项目是Root View Controller,永远不会从堆栈中弹出。"稍后在同一部分继续说,"其中一个视图控制器被标记为初始视图控制器...这是将在第一次启动应用程序时显示的视图控制器。&# 34;
我的问题是初始视图控制器和根视图控制器总是一样的,还是可以不同?例如,如果您创建了一个游戏,其中根视图控制器是您玩游戏的视图,您可以使用不同的控制器(可能是开始屏幕)作为初始视图控制器,这将如何工作?
答案 0 :(得分:2)
这里有两个根视图控制器:
UIWindow
' rootViewController
。 (大多数应用只有一个UIWindow
但有些只有一个。)UINavigationController
的根视图控制器(its viewControllers
array中的第一个对象)。故事板中的初始视图控制器通常会被设置为关键窗口的根视图控制器(#1),尽管这也有例外。
如果碰巧是导航控制器(这很常见),那么导航控制器将拥有自己的根视图控制器(#2)。
答案 1 :(得分:2)
例如,如果您创建了Root View Controller所在的游戏 您玩游戏的视图可能会有所不同 控制器(可能是启动屏幕)是初始视图控制器, 这将如何运作?
让我们说为了论证,游戏使用导航控制器来管理其各种视图控制器。在这种情况下,导航控制器可能是初始视图控制器以及窗口的根视图控制器。游戏板视图控制器可能是导航控制器的根视图控制器。
如果你想在游戏开始时展示一个“游戏开始”视图控制器,至少有三个合理的选择:
当用户启动游戏时,让游戏开始视图控制器成为导航控制器的根目录,并将游戏板控制器推送到导航堆栈上。
以模态方式呈现游戏开始视图控制器,并在用户想要开始游戏时将其关闭。
让游戏开始视图控制器成为初始视图控制器(和窗口的根视图控制器),然后出现导航控制器(游戏板视图控制器为根)模态
所以不,“初始”视图控制器不需要是用户实际首先看到的视图控制器,它只是从故事板首先加载的视图控制器。它可能包含其他视图控制器,或者可能导致其他视图控制器立即显示。
答案 2 :(得分:0)
初始视图控制器与故事板相关联,故事板可以为您提供窗口的根视图控制器。
您可以在应用程序中使用更多的根视图控制器,但这些是次要的并且与窗口的根视图控制器分开。