簡體   English   中英

小部件鏈接有效,但不執行任何操作

[英]Widget link works but doesn't do anything

我有一個帶有鏈接的小部件。 我正在 SceneDelegate 中實現小部件SceneDelegate 問題是當我點擊小部件時,我得到一個鏈接,它可以工作。 但是當我在 SceneDelegate 中調用 View Controller SceneDelegate時,它什么也不做。 好吧,它可以打印一些東西,但它不會改變任何東西。 SceneDelegate

   // App launched
   func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        
        guard let windowScene = (scene as? UIWindowScene) else { return }
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = ViewController()
        self.window = window
        window.makeKeyAndVisible()
        getURL(urlContext: connectionOptions.urlContexts)
    }
    
    // App opened from background
    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        getURL(urlContext: URLContexts) 
    }
    
    // Get URL
    private func getURL(urlContext: Set<UIOpenURLContext>) {
        guard let urlContexts = urlContext.first(where: { $0.url.scheme == "app-deeplink" }) else { return }
        print(urlContexts.url)
        print("success")
        let viewController = ViewController()
        viewController.cameFromWidget()
    }

ViewController 中的 Function 更改標簽文本:

func cameFromWidget() {
        label.text = "Hello"
        print(label.text)
    }

小部件擴展:

var body: some View {
        Text(entry.date, style: .time)
            .widgetURL(URL(string: "app-deeplink://app"))
    }

所以 ViewController func 只是打印文本,但當我從SceneDelegate調用它時不會更改它。 我的小部件鏈接僅在 WidgetExtension 和 SceneDelegate 中,我沒有將其添加到 infoPlist。

我的問題:為什么它起作用但什么也不做? 也許我應該將它添加到某個文件中? 太感謝了!

我發現。 要在 viewController 中進行一些更改,您需要使用 rootViewController 進行更改:

private func getURL(urlContext: Set<UIOpenURLContext>) {
        guard let urlContexts = urlContext.first(where: { $0.url.scheme == "app-deeplink" }) else { return }
        print(urlContexts.url)
        print("success")
        let rootViewController = window?.rootViewController as? ViewController
        rootViewController?.cameFromWidget()
    }

暫無
暫無

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

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