iOS 使用SceneDelegate设置项目中的rootViewController

本文介绍如何在Swift UI中使用UIWindowScene进行场景切换,通过设置SceneDelegate和rootViewController为LoginViewController来实现应用启动时直接进入登录界面。
UIWindowScene *scene = [UIApplication sharedApplication].openSessions.allObjects.lastObject.scene;
            ((SceneDelegate *)scene.delegate).window.rootViewController = [LoginViewController new];

如果SceneDelegate不识别的话,记得import "SceneDelegate.h"

iOS开发中,`AppDelegate` 和 `SceneDelegate` 是两个关键的组件,用于处理应用程序生命周期和用户界面管理。它们之间的区别主要体现在职责划分、使用场景以及与iOS版本的关系上。 ### 职责划分 - **AppDelegate** 主要负责整个应用程序级别的生命周期事件。例如,在应用启动时初始化核心组件,或者在应用进入后台时保存数据[^1]。它是一个全局对象,适用于所有iOS版本。 ```objective-c - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = UIColor.whiteColor; self.window.rootViewController = UITabBarController.new; [self.window makeKeyAndVisible]; return YES; } ``` - **SceneDelegate** 则专注于与特定场景(Scene)相关的生命周期事件。随着iOS 13引入多任务分屏功能,每个窗口(Window)可以关联一个`SceneDelegate`实例,从而实现更灵活的多窗口管理[^2]。 ```objective-c - (void)sceneDidEnterBackground:(nonnull UIScene *)scene { // 在这里处理场景进入后台的操作 } ``` ### 使用场景 - **AppDelegate** 通常用于处理全局性的操作,如推送通知注册、状态栏样式设置等。这些操作不依赖于具体的用户界面元素,而是影响整个应用程序的行为[^4]。 - **SceneDelegate** 更适合处理与特定窗口或场景相关的逻辑。例如,当用户切换到另一个窗口时,可以通过`SceneDelegate`更新当前窗口的内容[^2]。 ### iOS版本支持 - **AppDelegate** 自iOS早期版本起就存在,并且在iOS 13及更高版本中仍然可用。它是兼容性最好的选择,尤其对于需要支持旧设备的应用程序来说非常重要[^1]。 - **SceneDelegate** 是iOS 13引入的新特性,专门为了应对多任务分屏和其他高级交互模式的需求。如果目标设备运行的是iOS 13或更高版本,则推荐使用`SceneDelegate`来更好地利用新功能[^2]。 ### 总结 | 特性 | AppDelegate | SceneDelegate | |------|-------------|----------------| | 引入时间 | iOS早期版本 | iOS 13 | | 生命周期事件 | 全局性事件(如启动、退出) | 场景相关事件(如进入后台) | | 多窗口支持 | 不直接支持 | 支持多窗口管理 | | 推荐用途 | 全局配置、推送通知注册 | 窗口级别的UI更新、分屏处理 | 通过合理分配`AppDelegate`和`SceneDelegate`的职责,开发者可以构建出既兼容又具备现代特性的iOS应用程序。这种分离设计使得代码结构更加清晰,同时也提高了用户体验的一致性和灵活性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值