swift - 如何更改此“布尔”,然后在其他地方使用更新后的值?
问题描述
所以我在这里创建了这个列表。我的目标是更改 的状态,Bool
以便稍后我可以在点击时更改背景颜色。我做不到。它仍然给我false
。
struct prayerTimesImages: Identifiable {
var id = UUID()
var name: String
var isActive: Bool
}
struct TodayView: View {
@State var prayerTimesImage = [
prayerTimesImages(name: "Fajr", isActive: false),
prayerTimesImages(name: "Zuhr", isActive: false),
prayerTimesImages(name: "Asr", isActive: false),
prayerTimesImages(name: "Maghrib", isActive: false),
prayerTimesImages(name: "Isha", isActive: false)]
VStack {
ForEach(prayerTimesImage, id: \.id) {prayerIcon in
Button(action: {}) {
// HS -- Content of Button
HStack {
Image(prayerIcon.name)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 50, height: 50)
Text("\(prayerIcon.name)")
Spacer()
}
.padding(.horizontal, 5)
.padding(.vertical, 10)
.background(prayerIcon.isActive ? Color.green : Color.white)
//.scaleEffect(longPressed ? 0.98 : 1)
.onLongPressGesture(minimumDuration: 1) {
prayerIcon.isActive = true
print(prayerIcon.isActive)
}
}.cornerRadius(10)
.shadow(radius: 2)}
.font(.system(.headline))
.foregroundColor(.black)
}
}.frame(width: totalWidth, alignment: .center)
解决方案
由于我无法在图像中复制/粘贴代码,因此我必须比我想的要精确一些。
问题 #1:您不能@State
在非View
. 编译器可能会让你这样做,但它不会正常工作。更改@State var active
为var active
。
问题#2:
var prayerTimesImage
需要@State var prayerTimesImage
问题 #3:您需要有一个索引,以便您可以修改prayerTimesImage
数组:
ForEach(Array(prayerTimesImage.enumerated(), id: \.1.id) { (index, prayerIcon) in
然后在你的onLongPressGesture
:
var copiedIcon = prayerIcon
copiedIcon.isActive = true
prayerTimesImage[index] = copiedIcon
无法测试,因为我无法复制代码,但 * 应该 * 处理好所有事情。
推荐阅读
- excel - 如何根据多个单元格值在多个工作表中重新分配单个行
- javascript - 无法从javascript中的foreach回调将html内容输出到页面
- sql - 将整数日期转换为 TSQL 中的字符串
- java - 必须关闭并重新启动应用程序才能在地图上显示正确的位置
- javascript - Html 到图像在半圆图中不起作用
- amazon-web-services - AWS 翻译 | 异步批处理 | 命令行 | 描述文本翻译作业无效的命令
- android - Android交叉编译JNI->没有找到实现
- vue.js - Vue:$emit 正在更改父值,但 v-if 没有响应
- angularjs - 如何从 Angularjs 更新记录的下拉列表中获取选定值?
- python - python中的r前缀