Swift Deeplink已经打开App已经打开的viewcontroller?

时间:2018-02-27 23:09:34

标签: ios swift deeplink

我有一个接受Deeplink URL的应用程序,并使用链接中的变量打开一个viewcontroller,如果用户第一次使用Deeplink打开/运行该应用程序,它的效果很好。

但是,如果应用程序已经打开/或在后台并且该视图控制器打开...然后再打开相同的视图控制器备份,那么我有两个。我不想再打开viewcontroller了。

是否有某种方法可以识别已经打开的viewcontroller并将变量从Deeplink传递给它?

或者我是否需要以某种方式关闭它并重新打开它?

我愿意接受建议......先谢谢。

2 个答案:

答案 0 :(得分:0)

尝试使用UIApplication.shared.keyWindow?.rootViewController并测试它是什么类。例如:

if let vc = UIApplication.shared.keyWindow?.rootViewController {
    if vc is SomeViewController {
        // Do something.
    }
}

答案 1 :(得分:0)

您可以使用以下方法找到可见的视图控制器

func getVisibleViewController(_ rootViewController: UIViewController?) -> UIViewController? {

    var rootVC = rootViewController
    if rootVC == nil {
        rootVC = UIApplication.shared.keyWindow?.rootViewController
    }

    if rootVC?.presentedViewController == nil {
        return rootVC
    }

    if let presented = rootVC?.presentedViewController {
        if presented.isKind(of: UINavigationController.self) {
            let navigationController = presented as! UINavigationController
            return navigationController.viewControllers.last!
        }

        if presented.isKind(of: UITabBarController.self) {
            let tabBarController = presented as! UITabBarController
            return tabBarController.selectedViewController!
        }

        return getVisibleViewController(presented)
    }
    return nil
}

然后您可以打开显示的视图

if let presentedView = getVisibleViewController(window?.rootViewController)  {
                        switch presentedView {
//code
default: 
//code
}
}

当然在交换机中提供了一个视图控制器,如果它不是你想要打开的那个。

打开之前无需关闭viewcontroller!