【问题标题】:How to open a specific View Controller from Today Widget?如何从 Today Widget 打开特定的 View Controller?
【发布时间】:2015-06-09 07:14:31
【问题描述】:

我正在创建一个简单的 Today 小部件,其中包含一个按钮,当按下该按钮时,应该会在我的相应应用程序中打开一个特定的 View Controller。

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

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

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

【问题讨论】:

    标签: ios swift ios8-today-widget


    【解决方案1】:

    您可以为您的应用创建一个 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 并将其添加到其中,或者您可能只是在标签栏控制器中 switch to a given tab,或者您在执行任何操作之前 might back out all the current view controllers to your root screen。不幸的是,这些操作没有一个通用的答案,这完全取决于您到底想做什么。

    【讨论】:

    • 我已经尝试过并实现了 application:openURL:sourceApplication:annotation 但奇怪的是,它没有被调用。 (谷歌也没有帮助)
    • 但是您的应用程序启动了吗?奇怪的。我制作了一个快速参考应用程序,您可能可以查看它(可能在您项目的“信息”选项卡下)。如果您在 Safari 中键入 myapp://,您会看到它启动了该回调方法。 cl.ly/0H3h2Q2n3b0V
    • 没错,它会启动,但它只是显示初始视图控制器。
    • 是的,它总是会启动第一个 VC(或者,如果应用程序已经在运行,则只需多任务切换到应用程序,其中包含上次打开的任何屏幕),这就是您需要检查的原因该应用程序委托方法中的 URL,然后手动将所需的任何 VC 添加到堆栈中。
    • 这是一个更新版本,显示了当应用程序通过方案打开时(与正常打开相比)抓取视图控制器并将其添加到导航堆栈:cl.ly/233C1B180k1B,也许这会有所帮助?
    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多