1

我有一个接受 Deeplink URL 的应用程序,并打开一个带有来自链接的变量的视图控制器,如果用户第一次使用 Deeplink 打开/运行该应用程序,它运行良好。

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

有什么方法可以识别已经打开的视图控制器并将变量从 Deeplink 传递给它?

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

我愿意接受建议....在此先感谢。

4

2 回答 2

0

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

if let vc = UIApplication.shared.keyWindow?.rootViewController {
    if vc is SomeViewController {
        // Do something.
    }
}
于 2018-02-28T02:08:57.237 回答
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
}
}

当然,如果它不是您想要打开的视图控制器,则在开关中呈现一个视图控制器。

无需在打开视图控制器之前关闭它!

于 2018-02-28T03:26:12.933 回答