首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIScene userActivity为空

UIScene userActivity为空
EN

Stack Overflow用户
提问于 2020-04-16 20:56:23
回答 1查看 189关注 0票数 1

我有一个(催化剂)应用程序,能够有几个窗口。我创建了一个按钮,如果用户按下这个按钮,应用程序就会创建一个新窗口。为了知道需要显示什么视图,我有不同的NSUserActivity activityTypes。在新窗口中应该有一个按钮,可以关闭这个新窗口。问题是,在循环打开的会话时,所有的userActivities都是nil (我需要UIApplication.shared.requestSceneSessionDestruction的正确UISceneSession

这是我的代码:

代码语言:javascript
复制
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")
            }
        }
    }
}
代码语言:javascript
复制
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()
        }
    }
...
代码语言:javascript
复制
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")
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-05-13 14:07:41

我遇到了同样的问题。我最终为每个场景分配了唯一的代理类,并进行了检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61250787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档