iOS 17小组件开发:创建可交互的按钮和切换开关
创作时间:
作者:
@小白创作中心
iOS 17小组件开发:创建可交互的按钮和切换开关
引用
CSDN
1.
https://blog.csdn.net/sd19871122/article/details/142920447
本文将介绍如何在iOS 17及以上版本中创建可交互的小组件。通过使用AppIntent,开发者可以实现按钮和切换开关的交互功能,使小组件更加智能化和便捷。
可交互小组件
注意:
需要 iOS 17及以上版本
可交互的组件仅支持 Button 和 Toggle 组件,其他控件不支持。
AppIntent意图
要想实现可点击交互的按钮需要继承 AppIntent并实现对应的方法,AppIntent 在 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")
// 定义一个变量value
@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)
}
}
效果
最好运行看效果,预览模式可能不响应
热门推荐
普洱茶陈化原理及其影响因素详解
大批“中国游客”入境泰国被卡?被捕?免签最新解读公布!
双十一物流大考前,淘宝商家如何做好物流设置
芜湖湾沚区至步行街公交专线开通,智能查询让出行无忧
政策利好叠加技术创新,塑胶跑道行业驶入发展快车道
如何检查轮胎并判断是否需要更换?这些检查方法有哪些实际效果?
50年考古发掘,8000件陶俑重现秦军雄风
从零到一构建AI知识库:RAG技术提升企业应用性能
ISO 9001到AWS认证:软件开发人员必知的八项专业认证
“盐池滩羊”出宁夏记
SD-WAN网络专线:企业高效办公的新引擎
攀枝花一日游:品尝千年羊肉米线,探秘1500米龙洞
救蛇反被咬:农夫与蛇的故事与人生警示
传送冷却延长,卡莉斯塔受限:《英雄联盟》迎来15.1版本
智能家居控制系统,这样的系统要怎么去设计这个程序呢?
交货后国外买方拖延付款,卖方如何通过合同条款保护权益?
柯尔鸭幼鸭的饲料喂养指南:最佳喂食量和注意事项
早醒竟是身体在求救?医生揭秘真相
“世界之最”藏深山:天水大地湾遗址期待正名
三星电视遥控器配对全攻略:三种方法轻松搞定
智能农机实现农田全程无人化,精准作业提升效率
2024天津高考志愿填报指南:10步流程、时间安排与填报技巧
含铅汽油百年之殇:1.7亿美国人智力受损,1.51亿心理健康障碍
逍遥散的主治与功能
赵阿姨的脑血管手术费用之痛:医保政策助力减轻负担
中国历史上反贪腐最严厉的三个朝代:雍正、赵恒、朱元璋
从珍珠婚到抗癌路:两段爱情诠释七夕真谛
中国特殊教育入学率从6%提升至95%,全纳教育体系日趋完善
边城茶峒古镇:湖南省乡村旅游“四个一百”精品民宿聚集区
蒙古统治俄罗斯200余年,为何现在俄罗斯人不像东方人?答案扎心