*免责声明:我只在iOS / XCode / Swift编码了几个星期
我有通用链接工作,点击我的应用程序外部的链接打开应用程序,我在AppDelegate类中捕获Url。
所以这一切都很好。
我的问题是......我如何重定向到正确的UIViewController并从我的URL传递控制器一些信息?所有Universal Link教程都会在它们到达之前停止。
特别是我对AppDelegate的生命周期以及它与UIViewController的关系感到困惑。
我的应用程序有两个UIViewController(这是对吗?)一个UINavigationController。
我已尝试在AppDelegate中处理url事件,并设置公共属性,然后在我的ViewController中获取对AppDelegate的访问权限。但是,点击通用链接后,string input = "Documents/Z_Documentation/PDF/sales.2010+Implementation+Revised+Feb10.pdf";
string output = input.Split(new string[] { "/PDF/" }, StringSplitOptions.None).First() + "/PDF/doc123";
和viewDidLoad
都不会再次被调用: - /
从AppDelegate重定向到ViewController的最佳方法是什么?我的目标只是加载根视图控制器,但我需要从URL传入一些数据。怎么样?
答案 0 :(得分:1)
在根视图控制器上显示控制器
let urlString = url.absoluteString
let queryArray = urlString.componentsSeparatedByString("/")
if queryArray[2].lowercaseString == "yourQuery" {
let queryId = Int(queryArray[3])
if self.window?.rootViewController?.presentedViewController != nil {
self.window?.rootViewController?.dismissViewControllerAnimated(false, completion: nil)
}
let queryVC = self.window?.rootViewController?.storyboard?.instantiateViewControllerWithIdentifier(QUERY_SCENE) as? QueryViewController
queryVC?.urlQueryId = queryId!
self.window?.rootViewController?.presentViewController(queryVC!, animated: true, completion: nil)
}
修改:如果您要执行以下操作。
然后按下控制器' OnBackPressViewController'现在的控制器' PresentedViewController'
if self.window?.rootViewController?.presentedViewController != nil {
self.window?.rootViewController?.dismissViewControllerAnimated(false, completion: nil)
}
let navController = self.window?.rootViewController?.storyboard?.instantiateInitialViewController() as? UINavigationController
let presentedVC = self.window?.rootViewController?.storyboard?.instantiateViewControllerWithIdentifier(PRESENTED_SCENE) as? PresentedViewController
//Pass parameters to PresentedViewController
let onBackPressViewController = self.window?.rootViewController?.storyboard?.instantiateViewControllerWithIdentifier(ON_BACK_PRESS_SCENE) as? OnBackPressViewController
navController!.pushViewController(onBackPressViewController!, animated: true)
navController!.pushViewController(presentedVC!, animated: true)
self.window?.rootViewController?.presentViewController(navController!, animated: true, completion: nil)
您可以根据该更新代码。永远记住你必须在rootViewController上呈现任何视图控制器。
答案 1 :(得分:0)
这取决于您的应用架构。您绝对可以假设AppDelegate具有对rootViewController
(window?.rootViewController
)的引用。你应该知道那个控制器的类型是什么。然后你可以访问另一个,依此类推。无论如何,这个问题在我看来太过通用了。