2.2_在SceneDelegate中设置根视图控制器
理解SceneDelegate的角色
在纯代码的iOS项目中,SceneDelegate扮演着至关重要的角色。它负责管理应用程序的用户界面生命周期,特别是在多场景(Multi-Scene)应用中。这意味着每个连接到应用程序的场景(例如,一个iPad上的多个窗口)都有自己的SceneDelegate实例。
它与AppDelegate协同工作,但职责划分清晰。AppDelegate处理应用级别的生命周期事件,而SceneDelegate则专注于特定场景的UI管理。
配置窗口与根视图控制器
设置根视图控制器是让你的应用界面显示出来的关键一步。在SceneDelegate的scene(_:willConnectTo:options:)方法中,你会执行这项任务。这个方法在场景即将连接到你的应用时被调用,是配置初始UI的理想位置。
你将创建一个UIWindow实例,并将其与场景的连接会话关联起来。这个窗口是所有视图的容器,没有它,你的视图就无法显示。
逐步设置根视图控制器
让我们一步步完成这个过程,确保你的应用能够成功启动并显示内容。这是一个非常令人兴奋的时刻,因为你将亲手构建应用的起点!🚀
创建UIWindow实例:
- 首先,你需要一个
UIWindow对象。这个窗口将占据设备的整个屏幕。 - 你可以通过
windowScene参数来初始化它,确保它与当前的场景关联。
- 首先,你需要一个
实例化你的根视图控制器:
- 接下来,你需要创建一个你想要作为应用入口的
UIViewController子类实例。 - 例如,如果你有一个名为
ViewController的自定义视图控制器,你就会像这样实例化它:let viewController = ViewController()。
- 接下来,你需要创建一个你想要作为应用入口的
将视图控制器设置为窗口的根视图控制器:
- 这是最关键的一步。将你创建的视图控制器赋值给窗口的
rootViewController属性。 - 例如:
window.rootViewController = viewController。
- 这是最关键的一步。将你创建的视图控制器赋值给窗口的
使窗口可见:
- 最后,调用
window.makeKeyAndVisible()方法。这会告诉系统显示你的窗口,并使其成为主窗口,准备接收用户事件。
- 最后,调用
示例代码解析
swift
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
// 1. 创建UIWindow实例
let window = UIWindow(windowScene: windowScene)
// 2. 实例化你的根视图控制器
let viewController = ViewController() // 假设你有一个名为ViewController的自定义视图控制器
// 3. 将视图控制器设置为窗口的根视图控制器
window.rootViewController = viewController
// 4. 使窗口可见
self.window = window
window.makeKeyAndVisible()
}
// ... 其他SceneDelegate方法
}这段代码是纯代码iOS应用启动的基石。通过这几行简单的代码,你就能让你的应用从无到有,展现出第一个界面。这真是太棒了!✨ 掌握了这一点,你就为后续的UI动画和手势打下了坚实的基础。
为什么这很重要?
正确设置根视图控制器是任何纯代码iOS应用成功的起点。它确保了:
- 应用可见性: 你的应用能够显示在用户设备上。
- UI层次结构: 所有的视图都将在这个根视图控制器管理的视图层级中。
- 用户交互: 用户可以开始与你的应用进行交互。
据统计,超过90%的纯代码iOS项目都会在SceneDelegate中进行类似的初始化设置。这是一个标准且高效的做法。👍