如何从小部件扩展导航到 UIKit viewController?

Jkr*_*ist 5 widget ios swift swiftui

我目前正在尝试使用 SwiftUI 制作一个小部件。假设我的代码是这样的:

struct WidgetView: View {
    var data : DataProvider.Entry
    var body: some View {
        ZStack {
            Image("Clicker")
                .padding(.all, 15)
        }.widgetURL(URL(string: "ClickerViewController"))
        .padding(.all, 30)
        .background(Color.green)
    }
}
Run Code Online (Sandbox Code Playgroud)

目前,点击小部件将打开应用程序的主屏幕。想要导航到特定屏幕。支持的家庭: . systemSmall-所以需要使用。widgetURL而不是 .Link

那么URL是Clicker的地方,如何导航到被调用的viewControllerClickerViewController呢?如何处理这些链接?我想任何例子或解释都会在不久的将来帮助我和许多其他人;)

谢谢你!

Asp*_*eri 1

这是可能的方法

var body: some Scene {
    @StateObject private var appState = AppState()

    WindowGroup {
        ContentView()
            .environmentObject(appState)
            .onOpenURL(perform: { url in
                appState.handle(url)       // redirect to app state
            })
    }
}
Run Code Online (Sandbox Code Playgroud)

并且AppState可以有,例如

class AppState: ObservableObject {
    @Published var appScreen: _SomeEnumType_

    func handle(url: URL) {
        // ... update `appScreen` here correnspondingly
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,ContentView根据应用程序状态,您可以在内部切换显示的视图。