我有一个接受Deeplink URL的应用程序,并使用链接中的变量打开一个viewcontroller,如果用户第一次使用Deeplink打开/运行该应用程序,它的效果很好。
但是,如果应用程序已经打开/或在后台并且该视图控制器打开...然后再打开相同的视图控制器备份,那么我有两个。我不想再打开viewcontroller了。
是否有某种方法可以识别已经打开的viewcontroller并将变量从Deeplink传递给它?
或者我是否需要以某种方式关闭它并重新打开它?
我愿意接受建议......先谢谢。
答案 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!