Skip to content

2.2_在SceneDelegate中设置根视图控制器

理解SceneDelegate的角色

在纯代码的iOS项目中,SceneDelegate扮演着至关重要的角色。它负责管理应用程序的用户界面生命周期,特别是在多场景(Multi-Scene)应用中。这意味着每个连接到应用程序的场景(例如,一个iPad上的多个窗口)都有自己的SceneDelegate实例。

它与AppDelegate协同工作,但职责划分清晰。AppDelegate处理应用级别的生命周期事件,而SceneDelegate则专注于特定场景的UI管理。

配置窗口与根视图控制器

设置根视图控制器是让你的应用界面显示出来的关键一步。在SceneDelegatescene(_:willConnectTo:options:)方法中,你会执行这项任务。这个方法在场景即将连接到你的应用时被调用,是配置初始UI的理想位置。

你将创建一个UIWindow实例,并将其与场景的连接会话关联起来。这个窗口是所有视图的容器,没有它,你的视图就无法显示。

逐步设置根视图控制器

让我们一步步完成这个过程,确保你的应用能够成功启动并显示内容。这是一个非常令人兴奋的时刻,因为你将亲手构建应用的起点!🚀

  1. 创建UIWindow实例:

    • 首先,你需要一个UIWindow对象。这个窗口将占据设备的整个屏幕。
    • 你可以通过windowScene参数来初始化它,确保它与当前的场景关联。
  2. 实例化你的根视图控制器:

    • 接下来,你需要创建一个你想要作为应用入口的UIViewController子类实例。
    • 例如,如果你有一个名为ViewController的自定义视图控制器,你就会像这样实例化它:let viewController = ViewController()
  3. 将视图控制器设置为窗口的根视图控制器:

    • 这是最关键的一步。将你创建的视图控制器赋值给窗口的rootViewController属性。
    • 例如:window.rootViewController = viewController
  4. 使窗口可见:

    • 最后,调用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中进行类似的初始化设置。这是一个标准且高效的做法。👍

本站使用 VitePress 制作