【问题标题】:Is it possible to move from one ViewController to another by using URLScheme?是否可以使用 URL Scheme 从一个 ViewController 移动到另一个 ViewController?
【发布时间】:2021-02-07 00:25:18
【问题描述】:

我正在开发一个项目,用户可以从外部打开应用程序并显示 ProductViewController(一个显示特定产品的视图控制器,其中包含名称、模式、价格等信息),我使用这个AppDelegate 内的函数:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool 

我想在应用程序中放置一些快捷方式按钮,当用户点击该按钮时,也可以在 ProductViewController 中访问相同的产品。(想象一下,有一次用户通过产品我放置了一些快捷方式,以便用户可以快速找到该产品)我知道我可以使用以下代码来做到这一点:

let productVC = ProductViewController()
present(productVC, animated: true)

但我想知道我是否可以使用这部分代码(在 AppDelegate 内也可以这样做)。 我不想同时使用这两种方式来完成一项工作。

【问题讨论】:

  • 正确的想法,但可能是错误的方式。您在应用程序委托中的代码应该从 URL 解码产品数据,然后调用一个函数来呈现产品 VC。在您的应用程序中,您可以调用该函数。无需添加 URL 的开销。
  • 是的,你是对的,我知道,但你认为有没有办法做到这一点?
  • 当然。为什么不?这是你的代码。检索产品详细信息后,您已经拥有移动到 vc 的代码。只需在需要时调用即可。
  • 不,我的意思是我在问题中提出的方式:)
  • 这可能是可能的,但我看不出有什么好处。它只是无缘无故地增加了很多复杂性。

标签: ios swift deep-linking url-scheme


【解决方案1】:

是的,您可以在应用程序中使用一个按钮调用 openURL(或者更确切地说是application(_:open:options)),其中的 URL 调用私有 URL 方案。然后,您将让您的应用委托对 URL 进行解码,确定 URL 指定的视图控制器,然后打开该视图控制器。

只需让您的按钮的 IBAction 使用您的自定义 URL 调用 application(_:open:options)。你可以使用类似的东西:

myApp://open?VC=ProductViewController

open 是你的应用寻找的动词,告诉它打开一个视图控制器,VC 查询参数告诉它要打开哪个 VC。

您需要什么帮助?

【讨论】:

  • 这正是我想知道的。多谢。 :)
  • 像 PaulW 一样,我并没有真正看到这样做的好处。有一个共享函数,它接受一个视图控制器标识符,并使用它来实例化和显示该视图控制器。从您的 URL 编码器和按钮 IBAction 调用该函数。这比让您的按钮调用 OpenURL() 更好
  • 我不明白您为什么认为这不是一个好主意?通过这种方式,当通过 URL Scheme 或通过点击快捷按钮从应用程序外部来时,我只需一次处理要打开的 viewController(在 AppDelegate 内)。
猜你喜欢
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多