修改SceneDelegate设置window的根控制器
告别Storyboard,拥抱纯代码UI布局!🎉 让我们一起探索如何在SceneDelegate中设置window的根控制器,开启你的iOS开发新篇章。
理解 SceneDelegate 的作用
SceneDelegate 是 iOS 13 引入的新概念,它负责管理 App 的场景(Scene)。每个场景代表 App 的一个用户界面实例。你需要在这里配置 window,并设置根视图控制器,从而决定 App 启动时显示的内容。
- 场景生命周期管理:
SceneDelegate负责处理场景的创建、激活、进入前台和后台等事件。 window配置:window是 App 内容的容器,SceneDelegate负责创建和配置window。- 根视图控制器设置:通过设置
window的rootViewController属性,你可以指定 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()
}这段代码做了以下几件事:
- 获取
UIWindowScene:确保场景是UIWindowScene类型。 - 创建
UIWindow:使用UIWindowScene创建UIWindow实例。 - 创建根视图控制器:实例化你想要作为根视图控制器的
ViewController(或者其他任何你想要的控制器)。 - 设置
rootViewController:将创建的视图控制器赋值给window的rootViewController属性。 - 显示
window:调用makeKeyAndVisible()方法,使window可见并成为主窗口。
创建你的根视图控制器
在上面的代码中,我们使用了 ViewController 作为根视图控制器。你需要创建这个类,或者替换成你自己的视图控制器。
- 创建新的 Swift 文件:在 Xcode 中创建一个新的 Swift 文件,命名为
ViewController.swift(或者你喜欢的名字)。 - 继承
UIViewController:让你的类继承UIViewController。 - 添加基本视图:在
viewDidLoad()方法中,添加一些基本的视图,例如UILabel或UIButton,以便在屏幕上看到效果。
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 的根控制器。继续探索,你会发现更多纯代码布局的乐趣!🚀