通过今日扩展中的按钮快速打开特定视图控制器

时间:2020-07-14 16:09:14

标签: ios swift today-extension

我正在尝试在今天的扩展程序中单击按钮时打开特定的视图控制器,但无法显示它。主应用程序正在使用url方案在主根控制器上正确打开,而不是我在App Delegate中设置的特定视图控制器上正确打开。

我尝试了所有可以在Google上找到的教程和答案,以进行说明: How to open Specific View controller on Widgets/ Today Extension click

但是我无法正常工作。 我试图找出问题出在哪里,我认为应用程序委托中的方法不会调用。我写了一些print()方法,但是它们都没有出现在控制台中。我已经正确配置了URL方案,就像上面链接中的答案一样,所以我不知道为什么App Delegate中的方法无法执行。

希望有人给我一个提示,我还能尝试些什么。

TodayViewController中的按钮IBAction中的代码:

    @IBAction func addButtonOnePressed(_ sender: UIButton) {
        let url = URL(string: "OpenURL://")!
        self.extensionContext?.open(url, completionHandler: nil)
    }
    

应用程序委托方法中的代码(我尝试了所有可能的方法):

    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
    {
        if url.scheme == "OpenURL"
        {

                let storyboard = UIStoryboard(name: "Groups", bundle: nil)
                let vc = storyboard.instantiateViewController(withIdentifier: "Group") as! MasterViewController
                self.window?.rootViewController = vc
                self.window?.makeKeyAndVisible()
     
        }
        return true
    }

更新: 我自己解决了。我必须在SceneDelegate中而不是在AppDelegate中完成所有工作,并照顾Tabbar Controller和导航Controller。

SceneDelegate.swift中的新代码:

    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: "Group") as? MasterViewController,
            let tabBarController = rootViewController as? UITabBarController,
            let navController = tabBarController.selectedViewController as? UINavigationController {
                navController.pushViewController(rootVC, animated: true)
                }
            }
        }
    }

0 个答案:

没有答案