Skip to content

修改SceneDelegate设置window的根控制器

告别Storyboard,拥抱纯代码UI布局!🎉 让我们一起探索如何在SceneDelegate中设置window的根控制器,开启你的iOS开发新篇章。

理解 SceneDelegate 的作用

SceneDelegate 是 iOS 13 引入的新概念,它负责管理 App 的场景(Scene)。每个场景代表 App 的一个用户界面实例。你需要在这里配置 window,并设置根视图控制器,从而决定 App 启动时显示的内容。

  • 场景生命周期管理SceneDelegate 负责处理场景的创建、激活、进入前台和后台等事件。
  • window 配置window 是 App 内容的容器,SceneDelegate 负责创建和配置 window
  • 根视图控制器设置:通过设置 windowrootViewController 属性,你可以指定 App 启动时显示的第一个视图控制器。

修改 SceneDelegate 代码

现在,让我们动手修改 SceneDelegate 的代码,设置 window 的根控制器。找到你的 SceneDelegate.swift 文件,并找到 scene(_:willConnectTo:options:) 方法。

swift
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }

    window = UIWindow(windowScene: windowScene)
    let viewController = ViewController() // 替换成你的根视图控制器
    window?.rootViewController = viewController
    window?.makeKeyAndVisible()
}

这段代码做了以下几件事:

  1. 获取 UIWindowScene:确保场景是 UIWindowScene 类型。
  2. 创建 UIWindow:使用 UIWindowScene 创建 UIWindow 实例。
  3. 创建根视图控制器:实例化你想要作为根视图控制器的 ViewController(或者其他任何你想要的控制器)。
  4. 设置 rootViewController:将创建的视图控制器赋值给 windowrootViewController 属性。
  5. 显示 window:调用 makeKeyAndVisible() 方法,使 window 可见并成为主窗口。

创建你的根视图控制器

在上面的代码中,我们使用了 ViewController 作为根视图控制器。你需要创建这个类,或者替换成你自己的视图控制器。

  1. 创建新的 Swift 文件:在 Xcode 中创建一个新的 Swift 文件,命名为 ViewController.swift(或者你喜欢的名字)。
  2. 继承 UIViewController:让你的类继承 UIViewController
  3. 添加基本视图:在 viewDidLoad() 方法中,添加一些基本的视图,例如 UILabelUIButton,以便在屏幕上看到效果。
swift
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white // 设置背景颜色

        let label = UILabel()
        label.text = "Hello, World! 🎉"
        label.textAlignment = .center
        label.frame = CGRect(x: 0, y: 0, width: 200, height: 50)
        label.center = view.center
        view.addSubview(label)
    }
}

运行你的 App

现在,运行你的 App,你应该能看到你创建的视图控制器显示在屏幕上。如果没有看到,请检查以下几点:

  • 确保 SceneDelegate 中的代码正确无误。
  • 确保你的根视图控制器已经正确创建并添加到 window 上。
  • 检查是否有其他代码干扰了 window 的显示。

深入理解

你可能想知道,为什么我们需要在 SceneDelegate 中做这些事情?这是因为 iOS 13 引入了场景管理,SceneDelegate 负责处理每个场景的生命周期和配置。通过在 SceneDelegate 中设置 window 的根控制器,我们可以更好地控制 App 的启动流程和用户界面。

  • 灵活性:使用 SceneDelegate 可以更灵活地管理 App 的多个窗口和场景。
  • 可测试性:将 UI 配置放在代码中,可以更容易地进行单元测试和 UI 测试。
  • 可维护性:纯代码布局可以提高代码的可读性和可维护性。

希望这个教程能帮助你理解如何在 SceneDelegate 中设置 window 的根控制器。继续探索,你会发现更多纯代码布局的乐趣!🚀

本站使用 VitePress 制作