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)
}
}
效果
最好运行看效果,预览模式可能不响应
热门推荐
喉鸣是怎么回事
喉鸣音和喉炎的区别
如何评估风险承受能力
【JS逆向篇上】算法逆向&断点调试&BP插件
11种建立持久客户关系的有效方法
手机和PC端互通的游戏有哪些介绍2025 可以互通的游戏推荐
鄱阳湖老爷庙的传说:从朱元璋到救生红船
一文读懂违法合同:特征、后果及应对方案
医生提醒:登革热发热切勿乱吃退烧药,慎用布洛芬
宅基地上放置集装箱的合法性探讨
AI预测彩票?别傻了,万维钢《拐点》揭秘真相!
员工离职的经济补偿金要扣税吗
经济补偿与赔偿:个税缴纳全解析!
中国新一代舰炮,155毫米口径,世界第一,到底有多强悍?
从76毫米到100毫米,人民海军中口径舰炮,兜兜转转80余年发展史
重大突破!一张图即可生成3D世界
房屋转租时要注意什么
经济日报:转向收益稳健产品,理财资金“存款化”趋势增强
颐和园中的天聋与地哑文化
土生土长的吉林市籍演员明星,知名度前十名!
体检报告看不懂?这些指标帮你读懂肝功能
详解 DB-25 接口:专业音频的多通道解决方案
家居装修公司能帮忙验房吗?验房要验些什么?
伯恩茅斯:小球队的大梦想,切尔西等豪门该反思了?
祛寒的中成药有什么
迎春花如何养护?迎春花的养植方法和注意事项?
最小的占地,却有着最高的功能集成,福建舰舰岛亮点十足
如何通过修改DNS设置来优化您的Steam游戏体验?
《爱的信仰》:一部融合奇幻与现实的创新短剧
《哪吒2》“破圈”密码