如何解决如何更改此 `Bool`,然后在其他地方使用更新后的值?
所以我在这里创建了这个列表。我的目标是更改 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",prayerTimesImages(name: "Asr",prayerTimesImages(name: "Maghrib",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
无法测试,因为我无法复制代码,但这 * 应该 * 照顾一切。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。