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)
}
}
效果
最好运行看效果,预览模式可能不响应
热门推荐
西安“短剧之都”的产业升级密码
胰腺彩超检查需要空腹吗?专家解读检查前的注意事项
年味记忆 | 北美鲜为人知的辛辣蔬菜藠头
科学喝茶指南 | 一个人每天喝几杯茶才不会中毒!(附计算方法)
Debian 12安装精简XFCE桌面环境并设置中文环境
磁力研磨抛光机参数设置技巧与应用
穿越千年的文化之旅,探索潮州必游的十大景点,让心灵与历史对话
人社部最新回应:挂靠单位缴纳社保将这样处理,灵活就业人员需警惕
德云社人事大变动!烧饼担任副总,栾云平的表情亮了,网友沸腾了
如何写一篇婚礼演讲稿
春天里盛开的生命之花——探索春季生长的植物
双一流大学师资水平排名:吉大规模最大,中科大高职称占比最高!
股票金针探底是什么意思:技术分析中的金针探底形态解读
香港证监会拟大幅提升三大指数持仓限额,港交所去年业绩创历史新高
长期消化不良怎么调理
规划调研项目如何开展
从玉琮看汉字“亚”的起源
“金”字的演变:从甲骨文到草书
中国首艘航母的舰长张峥少将简历
如何调整变速车的档位?变速车调档的技巧有哪些?
工作繁忙难陪孩子?利用好下班时间,亲子时光更充实!
生产运作管理的作用
色素牙美白:适应症、禁忌症与常见方法全解析
左侧腋窝下方肋骨疼痛是什么原因
崩铁新角色万敌深度解析:数值炸裂却难掩机制缺陷
游戏“捏脸”需要高手教程?用这个AI模型,一张肖像照就能快速生成
创伤结痂脱落后如何护理不留疤痕?
文旅策划中的数字技术应用与未来趋势
蒜苗用什么肥料能长粗,叶子发黄怎么治
伦敦足球地理:枪手蓝军热刺领衔英超7队,前八级联赛有52队