SwiftUI 表不更新变量 [英] SwiftUI Sheet not updating variable
问题描述
如果我通过选择另一个项目更改值,我正在尝试将项目传递到工作表.工作表一直显示第一项,即使我从来没有用第一项调用过工作表.
I'm trying to pass an item to a sheet, if I change the values by selecting another item. The sheet keeps displaying the first item, even when I never called the sheet with the first item.
这是一个错误还是我做错了什么?
Is this a bug or am I doing something wrong?
WorkoutList.swift
WorkoutList.swift
import SwiftUI
struct WorkoutList: View {
private var workouts = workoutData
@State var showWorkoutDetails = false
var body: some View {
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 20) {
ForEach(workouts) { workoutCard in
GeometryReader { geometry in
Button(action: {self.showWorkoutDetails.toggle()}) {
WorkoutCardView(workout: workoutCard)
.rotation3DEffect(Angle(degrees: Double((geometry.frame(in: .global).minX - 30) / -30)), axis: (x: 0, y: 10, z: 0))
.sheet(isPresented: self.$showWorkoutDetails) {
WorkoutDetails(workout: workoutCard)
}
}
}
.frame(width:246, height: 360)
}
}
.padding(30)
}
}
}
private let workoutData = [
Workout(name: "Workout #1", imageName: "workoutImage", color: Color.orange),
Workout(name: "Workout #2", imageName: "workoutImage", color: Color.green),
Workout(name: "Workout #3", imageName: "workoutImage", color: Color.red),
Workout(name: "Workout #4", imageName: "workoutImage", color: Color.blue)
]
WorkoutDetails.swift
WorkoutDetails.swift
import SwiftUI
struct WorkoutDetails: View {
var workout = Workout(name: "", imageName: "", color: Color.black)
var body: some View {
GeometryReader { geometry in
ZStack {
Rectangle()
.fill(self.workout.color)
VStack(alignment: .leading) {
VStack(alignment: .leading) {
Text(self.workout.name)
.foregroundColor(.white)
.font(.title)
.fontWeight(.heavy)
.lineLimit(nil)
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
.frame(height: 70)
}
.frame(width: 180)
Image(self.workout.imageName)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: geometry.size.width-60, height: 200)
.padding()
Spacer()
}
.padding(.top, 40)
.padding(.leading, 10)
}
}
.edgesIgnoringSafeArea(.bottom)
}
}
这里我想显示一个锻炼.但无论我如何改变它,我总是得到锻炼 #1",我不知道我做错了什么.
Here I want to display a workout. But whatever I change it, I always get "workout #1" and I don't know what I'm doing wrong.
推荐答案
创建具有可选锻炼的绑定.Nil 将是不显示工作表的情况,将锻炼分配给该变量会显示相应的工作表.
Create a binding with an optional workout. Nil will be the case that the sheet is not presented, assigning a workout to this variable displays the corresponding sheet.
struct WorkoutList: View {
private var workouts = workoutData
@State var selectedWorkout: Workout?
var body: some View {
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 20) {
ForEach(workouts) { workoutCard in
GeometryReader { geometry in
Button(action: { self.selectedWorkout = workoutCard }) {
WorkoutCardView(workout: workoutCard).rotation3DEffect(Angle(degrees: Double((geometry.frame(in: .global).minX - 30) / -30)), axis: (x: 0, y: 10, z: 0)).sheet(item: self.$selectedWorkout) { workout in
WorkoutDetails(workout: workout)
}
}
}.frame(width:246, height: 360)
}
}.padding(30)
}
}
}
这篇关于SwiftUI 表不更新变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!