如何在iOS上向我的小部件添加重新加载按钮?我知道Widget应该是只读的,没有交互元素。但是像“谷歌Map”这样的应用程序确实有一个重新加载按钮。
他们是如何做到这一点的?
的数据向视图中添加一个简单的Button将显示该按钮。但按下它时,应用程序将打开,新闻界将不会注册。使用deeplinks也会打开我的应用程序。我只要一个普通的重装按钮。
Button
deeplinks
py49o6xq1#
屏幕截图显示了已弃用的Today Extension小部件。现在我们使用WidgetKit。我设法在iOS 17的AppIntents中添加了重新加载按钮:1.创建意图
import AppIntents struct ReloadWidgetIntent: AppIntent { static var title: LocalizedStringResource = "Reload widget" static var description = IntentDescription("Reload widget.") init() {} func perform() async throws -> some IntentResult { return .result() } }
字符串1.创建重新加载视图
import SwiftUI import Intents struct ReloadView: View { var body: some View { Button(intent: ReloadWidgetIntent()) { Text("Refresh") } } }
型1.将重新加载视图添加到小部件视图中
import SwiftUI struct MyWidgetView : View { var entry: MyTimelineProvider.Entry var body: some View { VStack { Text(entry.date) .invalidatableContent() ReloadView() } }
型
**. invalidableContent()**用于指示此视图将被更新的动画。这是我发现的唯一一种动画小部件刷新的方法。
来源:Apple wwdc23
1条答案
按热度按时间py49o6xq1#
屏幕截图显示了已弃用的Today Extension小部件。现在我们使用WidgetKit。
我设法在iOS 17的AppIntents中添加了重新加载按钮:
1.创建意图
字符串
1.创建重新加载视图
型
1.将重新加载视图添加到小部件视图中
型
**. invalidableContent()**用于指示此视图将被更新的动画。这是我发现的唯一一种动画小部件刷新的方法。
来源:Apple wwdc23