簡體   English   中英

SwiftUI:如何更改子視圖?

[英]SwiftUI: How to change subview?

我想通過子視圖的 function 調用更改子視圖的 state。 但是視圖沒有更新。

struct MainView: View {

    var subView: SubView = SubView()

    var body: some View {
        subView
        Button("Button") {
            subView.change()
        }
    }
}

struct SubView: View {

    @State private var enabled = false

    var body: some View {
        if enabled {
            Text("Some Label")
        }
    }

    public func change() {
       enabled.toggle()
    }
}

使用@Binding 可以做到這一點,就像這里描述的那樣: https://www.hackingwithswift.com/forums/swiftui/calling-functions-of-sub-views/1960

但我對這個解決方案不滿意,因為我想完全提取視圖。 使用@Binding,我的主視圖中仍然有一些子視圖。

如果是State到視圖,您總是希望將其保留在該視圖中,而不是從另一個視圖影響它。 解決方案是將按鈕放在子視圖中並直接訪問@State var enabled 此外,你寫這篇文章的方式會給你多個視圖。 您總是希望視圖結構返回單個視圖,因此我將TextButton放入VStack

struct MainView: View {

    var body: some View {
        SubView()
    }
}

struct SubView: View {

    @State private var enabled = false

    var body: some View {
        VStack {
            if enabled {
                Text("Some Label")
            }
            Button("Button") {
                enabled.toggle()
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM