我有一个接受 Deeplink URL 的应用程序,并打开一个带有来自链接的变量的视图控制器,如果用户第一次使用 Deeplink 打开/运行该应用程序,它运行良好。
但是,如果应用程序已经打开/或在后台并且打开了该视图控制器......然后它会再次打开相同的视图控制器备份,那么我有两个。我不想再打开一次视图控制器。
有什么方法可以识别已经打开的视图控制器并将变量从 Deeplink 传递给它?
还是我需要以某种方式关闭它并重新打开它?
我愿意接受建议....在此先感谢。
尝试使用UIApplication.shared.keyWindow?.rootViewController
和测试它是什么类。例如:
if let vc = UIApplication.shared.keyWindow?.rootViewController {
if vc is SomeViewController {
// Do something.
}
}
您可以通过以下方法找到可见的视图控制器
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
}
}
当然,如果它不是您想要打开的视图控制器,则在开关中呈现一个视图控制器。
无需在打开视图控制器之前关闭它!