Jor*_*n H 10 ios widgetkit swiftui appintents ios17
如何创建一个AppIntent
将在您的应用程序进程中运行并在您的小部件中使用它的程序Button
?我创建了一个新文件,将其添加到我的应用程序的目标中,创建了我的 AppIntent 结构,然后向我的小部件添加了一个按钮:Button(intent: TestIntent()) { Text("Test") }
。这会导致编译时错误Cannot find \'TestIntent\' in scope
,这是有道理的,因为我尝试使用它的小部件扩展中不存在此代码。但是向小部件添加交互性的文档指出:
\n\n对于小部件,创建一个采用 AppIntent 协议的新结构并将其添加到您的应用程序目标中...在协议\xe2\x80\x99s 所需的 Perform() 函数中,添加您想要提供给应用程序的操作的代码小部件。
\n
和
\n\n\n如果您采用 AppIntent 协议,您可以将自定义应用程序意图添加到小部件扩展目标或应用程序目标。将其添加到应用程序目标是更好的选择,因为您可以在应用程序中重复使用添加到小部件的按钮或切换按钮。
\n
和
\n\n\n当用户与小部件中的按钮或切换开关交互时,系统会在您的 app\xe2\x80\x99s 进程中运行 Perform() 函数。
\n
如果您将AppIntent
only 添加到小部件扩展目标,则意图将始终在小部件进程中运行。
如果您添加AppIntent
到您的应用程序和小部件扩展目标,则如果您的应用程序正在运行(即使在后台挂起),则该意图将在您的应用程序进程中运行;而当您的应用程序未运行时,该意图将在小部件进程中运行。如果您希望它始终在您的应用程序进程中运行,您可以实现openAppWhenRun
这将使您的应用程序进入前台,或者您实现在后台应用程序进程中运行的不同意图协议:AudioPlaybackIntent
、LiveActivityIntent
或ForegroundContinuableIntent
。
请注意,文档已更新以解决以前的一些不准确之处。感谢Mastodon上的 Michael澄清了这种行为!
在我的应用程序中,为了让它始终在主应用程序进程中运行,我创建了一个常规AppIntent
,将该文件添加到应用程序和小部件目标中,然后使其符合ForegroundContinuableIntent
但仅适用于主应用程序而不是扩展。ForegroundContinuableIntent
在 iOS 的应用程序扩展中不可用,因此您必须像这样注释它:
struct MyWidgetButtonIntent: AppIntent {
// ...
}
@available(iOSApplicationExtension, unavailable)
extension MyWidgetButtonIntent: ForegroundContinuableIntent { }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2727 次 |
最近记录: |