簡體   English   中英

UIScene userActivity 為零

[英]UIScene userActivity is nil

我有一個(催化劑)應用程序,它可以有幾個 windows。 我創建了一個按鈕,如果用戶按下此按鈕,應用程序將創建一個新的 window。 要知道,需要顯示什么視圖,我有不同NSUserActivity活動類型。 在新的 window 中應該有一個按鈕,可以關閉這個新的 window。 問題是,在循環打開的會話時,所有 userActivities 都是nil (我需要UIApplication.shared.requestSceneSessionDestruction的正確UISceneSession

這是我的代碼:

struct ContentView: View {
    var body: some View {
        VStack {
            // Open window type 1
            Button(action: {
                UIApplication.shared.requestSceneSessionActivation(nil,
                                                                   userActivity: NSUserActivity(activityType: "window1"),
                                                                   options: nil,
                                                                   errorHandler: nil)
            }) {
                Text("Open new window - Type 1")
            }

            // Open window type 2
            Button(action: {
                UIApplication.shared.requestSceneSessionActivation(nil,
                                                                   userActivity: NSUserActivity(activityType: "window2"),
                                                                   options: nil,
                                                                   errorHandler: nil)
            }) {
                Text("Open new window - Type 2")
            }
        }
    }
}
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)

            if connectionOptions.userActivities.first?.activityType == "window1" {
                window.rootViewController = UIHostingController(rootView: Window1())
            } else if connectionOptions.userActivities.first?.activityType == "window2" {
                window.rootViewController = UIHostingController(rootView: Window2())
            } else {
                window.rootViewController = UIHostingController(rootView: ContentView())
            }
            self.window = window
            window.makeKeyAndVisible()
        }
    }
...
struct Window1: View {
    var body: some View {
        VStack {
            Text("Window1")
            Button("show") {
                for session in UIApplication.shared.openSessions {
                    // this prints two times nil !
                    print(session.scene?.userActivity?.activityType)
                }
            }
        }
    }
}
struct Window2: View {
    var body: some View {
        Text("Window2")
    }
}

我遇到了同樣的問題。 我最終為每個場景分配了唯一的委托類並進行了檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM