我已盡我所能隔離問題。我不知道為什么下面的代碼不能按預期作業,我已經嘗試了我能想到的所有方法來解決這樣一個簡單的錯誤。我認為這與@State變數有關嗎?
預期功能:有一個帶有按鈕的視圖。當按鈕被按下時,一個重疊視圖覆寫原始視圖。當重疊視圖上的后退按鈕被按下時,重疊視圖消失。
實際功能:顯示視圖的按鈕有效,但按下后退按鈕不會使重疊視圖消失。
代碼:
struct MainView: View {
@State var showOverlap = false
var body: some View {
ZStack {
Button(action: {
showOverlap = true
}) {
Text("Button")
}
if showOverlap {
Overlap()
}
}
}
}
struct Overlap: View {
var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 40)
.aspectRatio(130/200, contentMode: .fit)
.foregroundColor(.gray)
Button(action: {
MainView.showOverlap = false
}, label: {
Text("Back")
})
}
}
}
uj5u.com熱心網友回復:
現在,您正在嘗試將其showOverlap視為一個static變數進行訪問MainView- 這將不起作用,因為它不是靜態屬性,即使是,您也需要參考MainView您正在顯示的特定實體- - 在 SwiftUI 中我們通常避免的東西,因為Views 是可傳遞的。
相反,您可以傳遞 a Binding-- 這是在 SwiftUI 中將父視圖的狀態傳遞給子視圖的一種方式。
struct MainView: View {
@State var showOverlap = false
var body: some View {
ZStack {
Button(action: {
showOverlap = true
}) {
Text("Button")
}
if showOverlap {
Overlap(showOverlap: $showOverlap) //<-- Here
}
}
}
}
struct Overlap: View {
@Binding var showOverlap : Bool //<-- Here
var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 40)
.aspectRatio(130/200, contentMode: .fit)
.foregroundColor(.gray)
Button(action: {
showOverlap = false //<-- Here
}, label: {
Text("Back")
})
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/381578.html
