XCode 11 新建项目之SceneDelegate(一)
2019-08-15 本文已影响0人
Just丶Go
因为在 iOS 13中, 新增特性 分屏 功能,所以现在新建项目都会包含一个名为SceneDelegate
的文件。
文末附有Demo
并且在AppDelegate
文件中找不到属性window
,最后发现 window
属性被移到了SceneDelegate
中。
那么问题来了~
Q: 在APP启动时,我想使用自定义的根控制器,但是突然不知道怎么做了!!!
现在记录下如何自定义
1. 首先找到 info.plist 文件,找到 Key 为`Application Scene Manifest`的字典.
该字典结构如下:
`Application Scene Manifest =
{
Enable Multiple Windows : NO,
Scene Configuration : {
Application Session Role : [
Configuration Name : Default Configuration,
Delegate Class Name : $(PRODUCT_MODULE_NAME).SceneDelegate,
Storyboard Name : Main
]
}
}`
如图:
2. 将 `Storyboard Name : Main` 这一栏删掉,如果只删掉 `Main` 而不删掉 Key,APP启动时还是会去找`storyboar`,从而报错。
3. 界面初始化的操作要到 `SceneDelegate` 中进行设置,和以前在`didFinishLaunchingWithOptions`中一样。
代码如下:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.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).
guard let windowScene = (scene as? UIWindowScene) else { return }
let vc = ViewController()
let nc = UINavigationController(rootViewController: vc)
// Create the window. Be sure to use this initializer and not the frame one.
window = UIWindow(windowScene: windowScene)
window?.rootViewController = nc
window?.makeKeyAndVisible()
}
PS:需要注意的是,初始化window时,要用windowScene:
这个方法拿到windowScene
来初始化,否则初始化后的界面是黑的。
Demo-->
Demo地址