- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
*Disclaimer: I've only been coding in iOS/XCode/Swift for a couple of weeks
我有 Universal Links 工作,点击我的应用程序外部的链接打开应用程序,我在 AppDelegate 类中捕获 Url。
所以这一切都很好。
我的问题是......然后如何重定向到正确的 UIViewController 并从我的 URL 向 Controller 传递一些信息?所有 Universal Link 教程在到达该部分之前就停止了。
特别是我对 AppDelegate 的生命周期以及它与 UIViewController 的关系感到困惑。
我的应用有两个 UIViewController 位于(这是对吗?)一个 UINavigationController 下。
我尝试在 AppDelegate 中处理 url 事件,并设置公共(public)属性,然后在我的 ViewController 中访问 AppDelegate。但是,单击通用链接后,viewDidLoad
和 viewWillAppear
都不会再次被调用 :-/
从 AppDelegate 重定向到 ViewController 的最佳方法是什么?我的目标只是加载 Root View Controller ,但我需要从 URL 传递一些数据。怎么办?
最佳答案
首先,阅读您的网址。
从 URL 获取参数
启动目标 Controller
为那个 Controller 设置你的参数
在 Root View Controller 上呈现 Controller
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)
}
编辑:
在导航 Controller 上推送一个 Controller 说“PresentedViewController”,如果 rootViewController 也是导航 Controller
然后在背面按下 Controller “OnBackPressViewController”呈现 Controller “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 上呈现任何 View Controller 。
关于ios - 如何将通用链接连接到 UIViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37783697/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!