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)
}
}
效果
最好运行看效果,预览模式可能不响应
热门推荐
昆明周边冬季最美自然景观推荐
从提示工程到原子机器人:AI助力新材料研发实现新突破
西安串串:麻辣江湖里的5000家小店,藏着古城的夜生活
元宇宙赋能文旅创新,西安春节旅游订单增六成
从设计到飞行:AI在航空航天的四大应用场景
衢州古城:南孔文化传承与廿八都古镇遗梦
济南轨道交通7号线:地铁建设助力经济发展
济南轨道交通7号线:穿山跨河保泉的奇迹
全国首条上跨黄河地铁:济南地铁7号线的保泉黑科技
尿微量白蛋白:肾损伤早期预警,这两类人需定期检测
西兰花中的萝卜硫素可改善肾功能,降低代谢负担
UACR检测助力肾病早筛,专家建议高危人群定期检查
数据要素产业崛起,律师如何抓住新机遇?
数据要素产业:律师如何乘风破浪?
告别压力打嗝:从情绪管理到深呼吸实践
打嗝不止?小心消化系统在抗议!
用AI和剪映玩转古诗词视频制作
用剪映玩转古诗词视频制作:从素材准备到后期处理的完整指南
海外华侨参访攀枝花,拟聘顾问助力国际合作
高硼玻璃杯对人体有害吗?高硼玻璃杯为什么不建议用?
为什么热水会使玻璃杯炸裂?如何避免这个常见的物理陷阱?
玻璃杯泡茶完全指南:从茶具选择到泡茶技巧
猫咪急性肠胃炎:四大症状识别与三大治疗方案
猫咪肠胃不适时该用益生菌,这样挑选最靠谱
一文读懂猫胃肠溃疡:症状、诊断、治疗与预防
浸泡是关键:教你做出香浓顺滑的完美豆浆
破壁机打豆浆指南:浸泡时间、操作要点与常见问题
清华大学的抗战岁月:特种研究与学生运动
药物治疗加生活调理,全面应对十二指肠球炎
十二指肠球部炎治疗指南:药物、饮食、生活调整三步走