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)
}
}
效果
最好运行看效果,预览模式可能不响应
热门推荐
区域发展如何影响房地产市场?这份指南帮你做出明智购房决策
为啥翡翠比和田玉贵那么多?翡翠和和田玉哪个养人?
玉和翡翠,这容易被混淆的玉石,你能分辨出来吗?
海外圈粉!来自世界的观众因何爱上中国春节档电影?
春节电影票房近三年对比:23年67亿,24年80亿,25年突破120亿
霍尔婚姻定理:从礼物分配到组合数学的重要定理
玉环交旅融合共绘海山胜景
莫干铸剑传说:从先秦到现代的千年传承
创新创业大赛作品案例怎么准备?
想要更好的高蛋白饮食?其实你不必多吃肉
如何撰写与修改论文:从初稿到定稿的完整指南
金山吕巷:让“新农人”“两司”群体也能感受到社区温暖
写作指南:10大说明方法让你的说明文生动有趣
中药汤剂助力,胆结石术后复发率降两成
如何打造品牌表情设计团队:从组建到运营的全方位指南
补脾虚的食物有哪些?适合脾虚者吃的15种食物,常见不贵!
深度解析:混合动力汽车的四级混合度分类及其技术特点
为什么都爱观察蚕宝宝?背后秘密揭晓!
越努力越焦虑?心理咨询师为你支招
二手房首付的计算方法与注意事项是什么?这些方法和注意事项如何帮助购房者?
解读费米悖论,人类为什么一直都找不到外星人?
沙皮狗:从价格到照顾指南的全方位介绍
“从明四家到当代吴门”:看吴门画派的文脉如何延续到当下
WLK鸟德需要多少暴击?暴击率提升技巧与装备选择指南
电感参数详解:如何正确选择电感器?
64.83米!宁波小将严子怡又破世界青年纪录
推进医防融合“一体化” 织密中老年人健康防护网
经验与科学的碰撞:人参的传统应用与现代研究
农村自建房门楼尺寸标准及讲究
地下室水电工程全攻略:防水、防潮、通风与排水的系统解决方案