Skip to content

1.5_修改SceneDelegate以编程方式设置根视图

在没有使用 Storyboard 的 iOS 项目中,你需要手动配置 SceneDelegate 来设置应用的根视图控制器。这允许你完全控制应用的启动流程和用户界面。让我们一步步来完成这个过程,确保你的应用能够正确显示内容。🎉

理解 SceneDelegate 的作用

SceneDelegate 负责管理应用场景的生命周期。在 iOS 13 及更高版本中,它取代了 AppDelegate 的部分职责,特别是与 UIWindow 和视图层次结构相关的部分。你需要在这里创建 UIWindow 实例,并将根视图控制器分配给它。

配置 UIWindow 和根视图控制器

首先,打开你的 SceneDelegate.swift 文件。你会看到一个 scene(_:willConnectTo:options:) 方法。在这个方法中,你需要编写代码来创建 UIWindow 并设置根视图控制器。以下是一个示例:

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

    // 1. 创建 UIWindow
    window = UIWindow(windowScene: windowScene)

    // 2. 创建你的根视图控制器
    let viewController = ViewController() // 替换为你的实际视图控制器

    // 3. 创建 UINavigationController 并将根视图控制器放入其中 (可选)
    let navigationController = UINavigationController(rootViewController: viewController)

    // 4. 设置 window 的根视图控制器
    window?.rootViewController = navigationController

    // 5. 显示 window
    window?.makeKeyAndVisible()
}

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

  1. 创建 UIWindow: 使用 UIWindowScene 创建一个新的 UIWindow 实例。
  2. 创建根视图控制器: 实例化你想要作为应用第一个显示的视图控制器。例如,ViewController()
  3. 创建 UINavigationController (可选): 如果你的应用需要导航栏,可以将根视图控制器放入 UINavigationController 中。
  4. 设置 rootViewController: 将创建的视图控制器或导航控制器设置为 windowrootViewController
  5. 显示 window: 调用 makeKeyAndVisible() 方法使 window 可见。

确保 UIWindow 被正确引用

SceneDelegate 中,你需要声明一个 UIWindow 属性,以便在 scene(_:willConnectTo:options:) 方法中使用。确保你的 SceneDelegate 类包含以下属性:

swift
var window: UIWindow?

这个属性用于存储对 UIWindow 实例的引用,这样系统才能正确显示你的应用界面。

示例:设置一个简单的根视图控制器

假设你有一个名为 ViewController 的视图控制器,你想要将其设置为根视图控制器。以下是 ViewController.swift 的一个简单示例:

swift
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white // 设置背景颜色为白色
        title = "首页" // 设置导航栏标题
    }
}

在这个例子中,我们简单地设置了视图的背景颜色和导航栏标题。你可以根据你的需求添加更多的 UI 元素和逻辑。

运行你的应用

现在,运行你的应用。你应该能看到你设置的根视图控制器显示在屏幕上。如果没有显示,请检查你的代码,确保 UIWindow 和根视图控制器被正确创建和配置。🎉

总结

通过修改 SceneDelegate,你可以完全控制应用的启动流程,并以编程方式设置根视图控制器。这为你提供了更大的灵活性和自定义能力,特别是在不使用 Storyboard 的项目中。记住,理解 UIWindow 和视图控制器的关系是关键。希望这个教程对你有所帮助!🚀

本站使用 VitePress 制作