【问题标题】:How to connect SceneDelegate without using `SceneConfiguration` in info.plist in iOS?如何在不使用 iOS 的 info.plist 中的“SceneConfiguration”的情况下连接 SceneDelegate?
【发布时间】:2021-06-18 03:12:19
【问题描述】:

我是 SceneDelegate 设置的新手。我注意到在 info.plist 中,我们在Scene Configuration 下有一个映射:

Configuration Name: Default Configuration <- this key
Delegate Class Name: $(PRODUCT_MODULE_NAME).SceneDelegate <- this file

然后在 AppDelegate 的 connectingSceneSession 中,我们返回带有密钥 Default Configuration 的配置。

return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)

是否可以在info.plist 中避免这种(key -&gt; file) 映射,并以编程方式将其连接起来?

注意:我不是在问故事板。有很多关于删除故事板的教程,我知道。

【问题讨论】:

  • 你为什么要这样做?这是我对 SceneDelegate 的看法 - 希望它会有所帮助。大约两年前,它与您的项目的“支持多个 Windows”复选框一起被引入。虽然它在 iPhone 上没有什么意义,但在 iPad(本机提供分屏)上却可以。现在,有几种方法可以“选择退出”使用 SceneDelegate - 请参阅这个问题:stackoverflow.com/questions/57467003/… - 但同样,为什么要搞乱 info.plist?
  • @dfd 因为我更喜欢纯代码而不是 info.plist 设置。例如,在代码中,“默认配置”中出现拼写错误等错误的可能性较小。
  • 我或多或少和你一样——我更喜欢代码而不是故事板或 xib。在它们中的任何一个中,您都无法在代码中做任何事情。但是info.plist?从来没想过。我让 Xcode 做 Apple 认为我应该猜到的事情。上面的链接是我最受好评的答案 - 到目前为止,它是第二个最受好评的答案。去搞清楚。我必须检查我的旧项目(许多针对 iOS 9+)来查看 info.plist 中的内容,因为它们都没有有场景委托。
  • @dfd 感谢您的链接。但我认为我仍然更愿意为未来的潜在用例保留场景委托。

标签: ios uikit


【解决方案1】:

Info.plist中删除“场景配置”(UISceneConfigurations)条目,并在AppDelegate中实例化UISceneConfiguration

// class AppDelegate
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
    if connectingSceneSession.role == UISceneSession.Role.windowApplication {
        let config = UISceneConfiguration(name: nil, sessionRole: connectingSceneSession.role)
        config.delegateClass = SceneDelegate.self
        config.storyboard = UIStoryboard(name: "Main", bundle: nil)
        return config
    }
    fatalError("Unhandled scene role \(connectingSceneSession.role)")
}

来自the manual

如果您没有在应用的 Info.plist 文件中包含场景配置数据,或者您想要动态更改场景配置数据,请实施此方法。 UIKit 在创建新场景前不久调用此方法。

【讨论】:

    猜你喜欢
    • 2022-07-01
    • 2015-11-28
    • 2023-03-11
    • 1970-01-01
    • 2021-12-08
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    相关资源
    最近更新 更多