删除 SceneDelegate 后在 AppDelagate 中设置 rootviewcontoller

Setting rootviewcontoller in AppDelagate after deleting SceneDelegate

我删除了 SceneDelegate.swift 并从 .plist 文件中删除了相关条目。

因为我的项目不支持 iPad,所以我不需要任何 SceneDelegate 东西。我说的对吗?

我用的是 SwiftUI,所以也没有 Storyboard

现在在 AppDelegate 文件中

var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        self.window = UIWindow(frame: UIScreen.main.bounds)

  if (TegKeychain.get("ISLOGGEDIN") == "1") {

           //present WelcomeScreen.swift

        } else {

            //present Login.Swift
        }

        return true
    }

其他文件

struct Login: View {
    var body: some View {
        Text("Login")
    }
}

struct WelcomeScreen: View {
    var body: some View {
        Text("WelcomeScreen")
    }
}

我在网络上进行了搜索,但没有找到任何有关如何在没有故事板的情况下呈现视图控制器的有用信息。任何帮助将不胜感激。

这是我为从模板创建的新 SwiftUI iOS 项目回滚场景支持所做的检查清单:

  1. 从 Info.plist

  2. 中删除 UIApplicationSceneManifest 键
  3. 从 AppDelegate 中删除所有与场景会话相关的委托方法

  4. 移除场景代理

  5. 更新 AppDelegate 如下

    import UIKit
    import SwiftUI

    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {

        var window: UIWindow?

        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
            let contentView = ContentView() // << default Hello World

            // Use a UIHostingController as window root view controller.
            let window = UIWindow(frame: UIScreen.main.bounds)
            window.rootViewController = UIHostingController(rootView: contentView)
            self.window = window
            window.makeKeyAndVisible()

            return true
        }

    }
  1. 构建 & 运行 - 有效。