問題:如何輕松更改 ForEach 陳述句內單獨視圖中的所有變數?(查看代碼中的注釋。)
ContentView()
@State var isShowing = false
var body: some View {
Toggle("IsShowing", isOn: $isShowing)
.onChange(of: isShowing) {
if isShowing {
//Set all var `Toggled` in ToggleView() to `true`
} else {
//Set all var `Toggled` in ToggleView() to `false`
}
}
Spacer()
if IsShowing {
ForEach(StaffList, id: \.self) { item in
ToggledView()
}
}
}
ToggledView()
@State var Toggled = false
var body: some View {
if Toggled {
Text("True")
} else {
Text("False")
}
}
如果您有任何疑問,請詢問。
uj5u.com熱心網友回復:
您在問題中提供的代碼存在一些問題,并且無法立即重現;讓我舉例說明:
- 您有兩個不同的變數,
IsShowing并且isShowing: 這是一個錯字,還是它們應該不同?IsShowing完全隱藏串列。我會假設他們有不同的目的。 - 最好遵循 Swift 中的約定:所有變數都以小寫開頭,因此避免使用
IsShowingorStaffList作為變數名。 - 無論如何,上面代碼中的串列是不可見的,因為當您在正文中有多個視圖時,您需要將它們嵌入到容器中,例如
VStack. onChange(of:perform:)在閉包中使用一個引數,上面的代碼不會編譯 - 請注意,因為 SwiftUI 在這種情況下會拋出誤導性的錯誤。- 您想更改所有切換
ToggledView:該變數toggled可用于該目的,但我將假設它具有本地范圍,因此我Toggle在下面的示例中添加了一個。
解決方案:您需要將父視圖中的變數與子視圖中的另一個變數系結,然后監聽子變數的變化。
父視圖有一個@State變數,需要將它傳遞給@Binding子視圖中的一個變數。您用 聆聽變化.onChange(of:) { }。
在下面的代碼中,串列中的每個專案都有自己特定的切換,但是當您更改視圖頂部的切換時,它們都會相應地更改。
父視圖:
struct ContentView: View {
let isShowingList = true // This replaces the "IsShowing" variable in the question
@State var isShowing = false
var body: some View {
// Embed content in a container, like VStack
VStack {
Toggle("Toggle all items", isOn: $isShowing)
.padding()
Spacer()
if isShowingList {
ForEach(staffList, id: \.self) { item in
// Pass the variable from this view to the child view
ToggledView(globalToggle: $isShowing)
}
}
Spacer()
}
.padding()
}
}
子視圖:
struct ToggledView: View {
// Make state variables private
@State private var toggled = false
// This is where the magic happens: changing iShowing in the parent view
// will change globalToggle in this view
@Binding var globalToggle: Bool
var body: some View {
Toggle(toggled ? "True" : "False", isOn: $toggled)
// .onChange(of:) closure receives one parameter: the variable changed
.onChange(of: globalToggle) { value in
toggled = value
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/451004.html
上一篇:SwiftUI:按關系過濾核心資料獲取(NSPredicate)
下一篇:移位陣列元素java
