我想在單擊自定義卡時顯示帶有模態視圖的卡的內容,但是當我僅單擊一張卡(不是不同的卡)時,它會顯示一個模型視圖,其中沒有資料。之后,它適用于每張卡。這是錯誤所在的代碼:
import SwiftUI
struct GoalsView: View {
@Binding var rootActive: Bool
@State private var showSheet = false
@Binding var addGoalIsClicked: Bool
@State private var selectedGoal : Goal = Goal(title: "", description: "")
var body: some View {
ScrollView {
VStack(){
HStack{
Text("Add goals")
.fontWeight(.bold)
.font(.system(size: 28))
Spacer()
}
.padding()
ForEach(goalDB) {goal in
Button() {
selectedGoal = goal
showSheet = true
}label: {
Label(goal.title, systemImage: "")
.frame(maxWidth: .infinity)
.foregroundColor(.black)
}
.padding()
.fullScreenCover(isPresented: $showSheet) {
ModalView(rootActive: $rootActive, goal: selectedGoal)
}
.background {
RoundedRectangle(cornerRadius: 10)
.frame(maxWidth: .infinity)
.foregroundColor(.white)
}
}
.padding(4)
}
}.background(Color.gray.opacity(0.15))
}
}
我試圖在互聯網上找到解決方案(有人遇到我同樣的問題),閱讀了 FullScreenCover 的檔案,但我不知道該怎么做
uj5u.com熱心網友回復:
代替使用布林值來控制是否顯示您的作業表/全屏封面(我將使用“作業表”,原理是相同的),您可以改用可選物件。
在這種情況下,您從一個可選值開始,即nil. 當您希望作業表顯示時,您將物件設定為實際值。關閉作業表會將您的狀態物件回傳到nil,就像關閉由布林值管理的作業表會將狀態重置為 false 一樣。
在您的代碼中,您可以洗掉您的showSheet狀態值,并轉換selectedGoal為可選值:
@State private var selectedGoal: Goal?
您的按鈕操作現在只需要設定此值:
Button {
selectedGoal = goal
} label: {
// ...
}
然后在你的修飾符中,你使用item:表單來代替。閉包接收狀態物件的解包版本——即,它總是得到 a Goal,而不是 a Goal?。這是您應該傳遞給正在呈現的視圖的值:
.fullScreenCover(item: $selectedGoal) { goal in
ModalView(rootActive: $rootActive, goal: goal)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/524961.html
標籤:迅速用户界面迅捷前锋状态
