SceneDelegate iOS13新特性

SceneDelegate是为了支持 iOS13之后的 iPadOS 多窗口口而退出的。Xcode11 默认会创建通过 UIScene 管理多个 UIWindow 的应用,工程中除了 AppDelegate 外会多一个 SceneDelegate。并且 AppDelegate.h 不再有 window 属性,window 属性被定义在了 SceneDelegate.h 中,SceneDelegate 负责原 AppDelegate 的 UI 生命周期部分的职责。
 
iOS13之前

AppDelegate的职责全权处理 App 生命周期和 UI 的生命周期。

这种模式完全没有问题,因为只有一个进程,只有一个与这个进程对应的用户界面。

 

iOS13 之后

AppDelegate 的职责是处理 App 的生命周期;

新增的 SceneDelegate 是处理 UI 的生命周期。

AppDelegate.h添加窗口
#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (nonatomic, strong) UIWindow *window;

@end

 

SceneDelegate.m添加跳转的窗口

复制代码
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    if (@available(iOS 13.0, *)) {
        self.window = [[UIWindow alloc] initWithWindowScene:(UIWindowScene *)scene];
    } else {
        // Fallback on earlier versions
    }
    self.window.backgroundColor = UIColor.whiteColor;
    self.window.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
    self.window.rootViewController=[[UINavigationController alloc]initWithRootViewController:[[ViewController alloc]init]];
    [UIApplication sharedApplication].delegate.window = self.window;
    [self.window makeKeyAndVisible];
}
复制代码

 

posted @   黄增松  阅读(305)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示