iOS 14-WidgetKit
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 14-WidgetKit相关的知识,希望对你有一定的参考价值。
参考技术AWidget 就像一个迷你版的 App,可以快速访问它所提供的信息—比如天气、日历事件、笔记等。Widget 还可以充当“快捷方式”,点击它会立即跳转到 App 的指定位置。
Widget 寄宿于 App,所以首先必须将 App 功能实现。
可以通过网络和本地数据两种方式进行数据的共享。本地数据共享可以通过 App Groups,它是 ios 8 之后推出的在 App 之间共享数据的方式,只需要简单的配置就可以实现数据的共享。
配置完成以后,可以通过 UserDefaults 或 FileManager 来实现 App 与 Widget 的数据共享,这里以 UserDefaults 为例,因为 SwiftUI 提供了 @AppStorage 来简化操作。
不论是哪种配置,都需要提供以下内容。
渲染 Widget 所需的数据模型,需要遵守 TimelineEntry 协议。
遵守 TimelineProvider 协议,告诉 WidgetKit 何时渲染与刷新 Widget。需要实现以下两个方法:
占位视图,是一个标准的 SwiftUI View,当第一次展示或者发生错误时都会展示该 View。
屏幕上 Widget 显示的内容,需要使用 SwiftUI 构建,可以针对不同尺寸的 Widget 设置不同的 View。
只能点击,点击会打开 App 。也可以通过 .widgetURL(myDeeplink) 方法配置当 Widget 被点击时触发哪个 Deep Linking,也可以通过使用链接使 Widget 的不同部分触发不同的 Deep Linking。
Widget案例
如何通过 iOS WidgetKit 读取应用程序创建的文件?
【中文标题】如何通过 iOS WidgetKit 读取应用程序创建的文件?【英文标题】:How to read files created by the app by iOS WidgetKit? 【发布时间】:2020-09-09 16:53:02 【问题描述】:我正在开发一个带有 widgetKit 扩展的应用程序,我想在小部件上显示用户创建的数据。 widgetKit如何读取app创建的文件?
【问题讨论】:
这个答案可能会有所帮助:Share data between main App and Widget in SwiftUI for iOS 14 【参考方案1】:您应该使用 App Groups Capability 在目标之间共享数据。
这是一个很好的 tutorial,作者是 RayWanderlich
【讨论】:
【参考方案2】:为了读取iOS widgetKit创建的文件,你需要在共享容器中创建文件
let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "yourapp.contents")?.appendingPathComponent("hello")
let data = Data("test read".utf8)
try! data.write(to: url!)
并且可以读取Widget类中的数据
@main
struct StuffManagerWidget: Widget
let kind: String = "TestWidget"
var body: some WidgetConfiguration
IntentConfiguration(kind: kind, intent: TestIntent.self, provider: Provider()) entry in
WidgetEntryView(entry: entry, string: string)
.configurationDisplayName("My Widget")
.description("This is an example widget.")
var string: String =
let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "yourapp.contents")?.appendingPathComponent("hello")
let data = try! Data(contentsOf: url!)
let string = String(data: data, encoding: .utf8)!
return string
()
【讨论】:
注意:当您在真机上运行应用程序时,您必须在 TARGET -> Capabilities -> App Group 中为应用程序目标和小部件目标配置共享容器 我收到错误:编写此代码时调用中有额外的参数“字符串”:(条目:条目,字符串:字符串) 这很好,但是您知道小部件是否可以读取应用程序创建的文件?我将数据存储在无处不在的容器中,似乎无法从小部件中读取它们。以上是关于iOS 14-WidgetKit的主要内容,如果未能解决你的问题,请参考以下文章