可交互小组件
注意:
AppIntent意图
要想实现可点击交互的按钮需要继承 AppIntent并实现对应的方法,AppIntent 在 AppIntents 库中,需要先引入 import AppIntents
import AppIntents
struct NumberManager {
static var number = 0
}
struct MyCalculateIntent: AppIntent {
static var title: LocalizedStringResource = "My Calculate Task"
static var description: IntentDescription = IntentDescription("My Calculate Number Task")
@Parameter(title: "value")
var value: Int
init() { }
init(value: Int) {
self.value = value
}
func perform() async throws -> some IntentResult {
NumberManager.number += value
return .result()
}
}
MyCalculateIntent 结构体遵守 AppIntent 协议并实现了对应的协议内容:title、description,并添加了一个 value 属性用来存储传入的数字,最后实现了 perform() 方法。
最终 MyCalculateIntent 会作用在可交互的按钮上,当点击按钮的时候就会调用 perform() 方法进行计算并将计算结果返回。
Widget
可交互小组件只支持 Button 和 Toggle , 点到组件我们可以看到在 iOS 17 上新增了支持传入 AppIntent 协议的初始化方法。
Widget代码
struct MyWidgetMiddleEntryView : View {
var entry: Provider.Entry
var body: some View {
VStack(spacing: 10) {
HStack {
Text("Time:")
Text(entry.date, style: .time)
}
Text("结果: (NumberManager.number)")
HStack {
Button(intent: MyCalculateIntent(value: 10)) {
Text("加 10")
}
Button(intent: MyCalculateIntent(value: 20)) {
Text("加 20")
}
Button(intent: MyCalculateIntent(value: -10)) {
Text("减 10")
}
Button(intent: MyCalculateIntent(value: -20)) {
Text("减 20")
}
}
Text("中号组件类型")
}
.widgetBackground(Color.white)
}
}
struct MyWidgetMiddleEntryView : View {
var entry: Provider.Entry
@State var isOn: Bool = true
var body: some View {
VStack(spacing: 10) {
HStack {
Text("Time:")
Text(entry.date, style: .time)
}
Text("结果: (NumberManager.number)")
HStack {
Toggle(isOn: NumberManager.number % 2 == 0 ? false : true, intent: MyCalculateIntent(value: 1)) {
Text("状态发生改变加1");
}.padding()
}
}
.widgetBackground(Color.white)
}
}
效果
最好运行看效果,预览模式可能不响应
本文同步自微信公众号 “程序员小溪” ,这里只是同步,想看及时消息请移步我的公众号,不定时更新我的学习经验。
阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=21378,转载请注明出处。
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=21378,转载请注明出处。
评论0