gpt4 book ai didi

ios - 如何将通用链接连接到 UIViewController?

转载 作者:行者123 更新时间:2023-11-29 00:54:13 24 4
gpt4 key购买 nike

*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。但是,单击通用链接后,viewDidLoadviewWillAppear 都不会再次被调用 :-/

从 AppDelegate 重定向到 ViewController 的最佳方法是什么?我的目标只是加载 Root View Controller ,但我需要从 URL 传递一些数据。怎么办?

最佳答案

  1. 首先,阅读您的网址。

  2. 从 URL 获取参数

  3. 启动目标 Controller

  4. 为那个 Controller 设置你的参数

  5. 在 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)
    }

编辑:

  1. 在导航 Controller 上推送一个 Controller 说“PresentedViewController”,如果 rootViewController 也是导航 Controller

  2. 然后在背面按下 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com