Asm*_*ita 4 widget today-extension swift3
我正在尝试在小部件click上打开特定的视图控制器,但无法打开它,我能够使用url模式打开应用程序,但是我想打开特定的视图控制器我该怎么做,这是使用open app的代码网址架构:
@IBAction func open_app(_ sender: Any)
{ extensionContext?.open(URL(string: "open://")! ,
completionHandler: nil)
}
在按钮上单击,我正在使用url模式成功运行应用程序。但是现在我想在该点击上打开特定的视图控制器,我该怎么做?
根据您的要求,我创建了一个示例来使其正常工作。
1.首先在TodayViewController界面中,创建3个不同UIButtons的tag值,并赋予它们的值以唯一地标识它们。

在这里,我给的标签为:1, 2, 3至First, Second and Third UIButton。
2.接下来,您需要编写代码以从Today Extension中打开您的Containing App。在TodayViewController创建@IBActionfor并将其连接到所有三个UIButtons。
@IBAction func openAppController(_ sender: UIButton)
{
if let url = URL(string: "open://\(sender.tag)")
{
self.extensionContext?.open(url, completionHandler: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,标记将添加到url方案中,以标识UIViewController需要在UIButton印刷时打开的内容。因此,该网址将类似于:open://1
3.在包含应用程序中, URL Types需要输入URL Scheme,即
从上面的屏幕截图可以明显看出,无需为要从扩展名中打开的每个URL进行输入。URLs具有相同的url scheme条目只有一个。
4.当包含应用程序是由拓开了,你可以在手柄AppDelegate’s application(_ : url: sourceApplication: annotation: )的方法。在这里,您可以处理要打开哪个控制器,即
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
{
if url.scheme == "open"
{
switch url.host
{
case "1":
//Open First View Controller
case "2":
//Open Second View Controller
case "3":
//Open Third View Controller
default:
break
}
}
return true
}
Run Code Online (Sandbox Code Playgroud)
url.scheme标识URLie 的方案,open并url.host标识URL其中当前设置为的主机组件UIButton's tag value,您可以使用该主机组件唯一地标识UIButton按下了哪个组件以及相应地下一步该做什么。
有关Today Extensions的更多信息,可以参考:https : //hackernoon.com/app-extensions-and-today-extensions-widget-in-ios-10-e2d9fd9957a8
让我知道您是否仍然面临与此有关的任何问题。
| 归档时间: |
|
| 查看次数: |
1689 次 |
| 最近记录: |