[英]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.