gpt4 book ai didi

ios - 当主应用程序未打开时,Swift 如何从今天的扩展中打开特定的 View Controller

转载 作者:行者123 更新时间:2023-12-05 04:59:07 25 4
gpt4 key购买 nike

我用一些 UIButtons 创建了一个今天的扩展,我想在用户点击一个按钮时打开一个特定的 View Controller 。当主应用程序打开时它现在可以工作,但是当它关​​闭时它只会打开主应用程序并且不会导航到我的特定 View Controller 。

我做了什么:如果在 TodayExtension View Controller 中按下按钮,我已经设置了 URL Sheme 并编写了 OpenURL 代码。

    @objc func buttonClick(sender: UIButton) {
let tag = sender.tag
if let url = URL(string: "OpenURL://\(tag)")
{
self.extensionContext?.open(url, completionHandler: nil)
}
}

SceneDelegate 中,我编写了代码以导航到 func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { 中的特定 View Controller 。

    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {

if let url = URLContexts.first?.url {

if url.scheme == "OpenURL" {

guard let rootViewController = (UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate)?.window?.rootViewController else {
return
}

let storyboard = UIStoryboard(name: "Groups", bundle: nil)

if let rootVC = storyboard.instantiateViewController(withIdentifier: "Create") as? CreateSingleGroupViewController,
let tabBarController = rootViewController as? UITabBarController,
let navController = tabBarController.selectedViewController as? UINavigationController {
navController.pushViewController(rootVC, animated: true)

rootVC.buttonTag = Int(url.host!)
}
}
}
}

但是就像我说的那样,这仅在之前打开主应用程序时才有效。即使主 ap 已关闭,我还需要做什么才能使它正常工作?

在 Google 的帮助下,我发现我必须设置 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {功能,但我不知道如何。我写的是

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
self.scene(scene, openURLContexts: connectionOptions.urlContexts)

}

但这行不通。

希望有人能帮助我。

最佳答案

终于解决了我的问题。

我必须在场景 willConnectTo.. 函数中添加一行:

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

guard let _ = (scene as? UIWindowScene) else { return }

if let url = connectionOptions.urlContexts.first?.url {
UIApplication.shared.open(url)
self.scene(scene, openURLContexts: connectionOptions.urlContexts)

}
}

关于ios - 当主应用程序未打开时,Swift 如何从今天的扩展中打开特定的 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63641970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com