【问题标题】:How can scene delegate be uses pre iOS 13?场景委托如何在 iOS 13 之前使用?
【发布时间】:2020-01-30 12:54:45
【问题描述】:

所以 iOS 13 真的给我带来了麻烦!我无法理解如何在我现有的应用程序中使用 SceneDelegate。

目前我在 AppDelegate 中使用布尔检查来确定首先显示哪个 ViewController。我需要弄清楚如何使用 SceneDelegate 复制它。

我主要关心的是如何确保我的应用可以在 iOS 13 和之前的任何 iOS 版本上运行?如果我添加 SceneDelegate,它不会使我在 iOS 13 之前运行的应用程序崩溃吗?

这是我目前设置 rootVC 的方法

if (loggedIn == nil){
           Utilities.setLoginAsInitialViewContoller(window: window)
       }
       else
       {
           if(termsAgree == nil){
               Utilities.setTermsAsInitialViewController(window: window)
           }
           if(loggedIn != nil){
               if(termsAgree != nil){
                   Utilities.setHomeAsInitialViewContoller(window: window)
               }
           }
       }
class func setLoginAsInitialViewContoller(window:UIWindow) {
       let storyboard = UIStoryboard(name: “Login”, bundle: nil)
       let controller = storyboard.instantiateViewController(withIdentifier: “LoginViewController”)
       window.rootViewController = controller
       window.makeKeyAndVisible()
   }
   class func setHomeAsInitialViewContoller(window:UIWindow) {
       let storyboard = UIStoryboard(name: “Home”, bundle: nil)
       let controller = storyboard.instantiateViewController(withIdentifier: “MainViewNavController”)
       window.rootViewController = controller
       window.makeKeyAndVisible()
   }
   class func setTermsAsInitialViewController(window:UIWindow){
       let storyboard = UIStoryboard(name: “Terms”, bundle: nil)
       let controller = storyboard.instantiateViewController(withIdentifier: “TermsViewController”)
       window.rootViewController = controller
       window.makeKeyAndVisible()
   }

以上代码包含在我的Utilities.swift 类中,并在我的AppDelegate.swift 中调用,如下所示:

Utilities.decideInitialViewController(window: self.window!)

【问题讨论】:

  • 你找到解决这个问题的方法了吗?

标签: swift appdelegate ios13 uiscenedelegate


【解决方案1】:

iOS 13 之前不能使用 SceneDelegate,这实际上会导致编译错误。

xxx 仅适用于 iOS 13.0 或更高版本

所有现有应用不需要 SceneDelegate 与 iOS 13 兼容。

您可以使用最新的 Xcode 版本构建您的应用程序,您应该一切顺利(只需进行一些调整,例如暗模式兼容性和一些新的 UI 更改,但这不会阻止您的应用程序在 iOS 中运行13+ 设备)。

即使我不建议这样做,您仍然可以使用 SceneDelegate,但您必须使用 @available 标签告诉 Xcode 此代码仅用于 iOS 13+ 设备。 这意味着 iOS 13+ 设备将使用 SceneDelegate,而 iOS 12 及更低版本将继续使用 AppDelegate。这种方法需要维护一些仅向后兼容的代码。

对此有一些解释here

【讨论】:

    猜你喜欢
    • 2020-01-30
    • 2020-02-20
    • 2021-03-09
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2020-02-14
    • 2013-02-23
    • 1970-01-01
    相关资源
    最近更新 更多