【问题标题】:How to navigate from widget extension to UIKit viewController?如何从小部件扩展导航到 UIKit viewController?
【发布时间】:2020-09-09 11:32:18
【问题描述】:

我目前正在尝试使用 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)
    }
}

此时,点击小部件会打开应用的主屏幕。想要导航到特定屏幕。 supportedFamilies: .systemSmall - 所以需要使用 .widgetURL 而不是 .Link

那么 URL 是 Clicker 的位置,如何导航到名为 ClickerViewController 的 viewController? 如何处理这些链接?我猜任何例子或解释都会在不久的将来帮助我和其他很多人;)

谢谢!

【问题讨论】:

    标签: ios swift swiftui widget


    【解决方案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
                })
        }
    }
    

    和AppState可以有,例如

    class AppState: ObservableObject {
        @Published var appScreen: _SomeEnumType_
    
        func handle(url: URL) {
            // ... update `appScreen` here correnspondingly
        }
    }
    

    所以在 ContentView 内,您可以根据应用状态切换显示的视图。

    【讨论】:

      【解决方案2】:
      func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
      
      }
      

      当我单击小部件时,我在SceneDelegate 中执行了此方法。您可以处理您的 url 并重定向到 ViewController

      【讨论】:

        猜你喜欢
        • 2021-03-12
        • 2020-06-03
        • 2020-11-16
        • 1970-01-01
        • 2012-08-06
        • 2019-03-21
        • 2016-01-19
        • 1970-01-01
        • 2021-10-15
        相关资源
        最近更新 更多