如何从 Today Widget 打开特定的 View Controller?

How to open a specific View Controller from Today Widget?

我正在创建一个简单的今天小部件,其中包含一个按钮,按下该按钮时应该会在我相应的应用程序中打开一个特定的视图控制器。

我想到的唯一解决方案是创建一个只能打开初始视图控制器的 URL 类型(至少据我所知)。

下面是我目前在 UIButton 操作中使用的代码:

   var url = NSURL(string: "_my_url_://")
    extensionContext?.openURL(url!, completionHandler: nil)

您可以为您的应用程序创建一个 URL 类型(例如 myapp://)并解析主机名 之后的 部分。例如 myapp://signupformmyapp://activities/15。您可以根据需要灵活地制作这些 URL。您不能真正将 URL 类型绑定到特定的 VC(自动),您必须完成阅读 URL 并在应用程序委托中换出 VC 的工作。

执行此操作后,您需要在应用委托中解析此 URL。当您的应用程序通过 URL 打开时,您将使用方法 application:openURL:sourceApplication:annotation: (docs) 调用您的应用程序委托,并且您可以检查 URL 中的任何项目你需要。

根据对 URL 的查看,您将根据需要显示的视图控制器手动操作导航堆栈。因此,例如,您可以 grab a view controller from your storyboard and add that in, or you might just switch to a given tab in your tab bar controller, or you might back out all the current view controllers to your root screen 在做任何事情之前。不幸的是,这些操作没有一个通用的答案,这完全取决于你到底想做什么。