如何在Xcode 14.2中使用AppDelegate和UIKit启动新项目[replicate]

gab6jxml  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(171)
    • 此问题在此处已有答案**:

How to remove Scene Delegate from iOS Application?(6个答案)
昨天关门了。

编辑

我在创建项目时错误地选择了"多平台"而不是"iOS"。
只需选择"iOS"来创建项目,事情将以传统方式完成。
我想在Xcode 14.2中启动一个新项目,只使用AppDelegate和UIKit,不使用SwiftUI和SceneDelegate。Xcode 13之前的方法似乎不起作用。

1.在Xcode 14.2中创建新项目
2.添加应用程序委托. swift
import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        window = UIWindow(frame: UIScreen.main.bounds)
        window!.rootViewController = MyViewController()
        window!.makeKeyAndVisible()
        return true
    }
}
3.添加我的视图控制器. swift
import UIKit

class MyViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .systemGreen

        print("viewDidLoad() called.")
        print("frame:", view!.frame)
    }
}

当应用程序启动时,预计会出现绿色屏幕,但显示的是黑色屏幕。
打印语句输出正确。
此时,将出现以下警告。
UIApplicationSceneManifest键添加到Info.plist将删除此警告,但黑屏仍将存在。(以前,不使用多个窗口的应用不需要此键。

[SceneConfiguration] Info.plist contained no UIScene configuration dictionary (looking for configuration named "(no name)")

我错过了什么简单的东西?

bvhaajcl

bvhaajcl1#

我假设您希望通过初始化UIViewController来调用应用,并且不太关心底层的UIResponder对象。
通过选择Storyboard作为所需的界面首选项来创建一个新项目(毕竟您不会使用故事板)。

然后将你的第一个视图控制器添加到窗口对象中。如果你想访问你的AppDelegate,你可以从下面的任何地方进行。

import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        
        guard let window = window else { return }
        
        let vc = UIViewController()
        vc.view.backgroundColor = .systemGreen
        window.rootViewController = vc
        window.makeKeyAndVisible()
        
        let appDelegate = UIApplication.shared.delegate as? AppDelegate
    }
}

如果您有意省略UIWindowSceneDelegate是出于其他原因,例如支持iOS 12,请纠正我

相关问题