【问题标题】:SwiftUI: How to change subview?SwiftUI:如何更改子视图?
【发布时间】:2021-12-30 10:51:27
【问题描述】:

我想通过子视图的函数调用来改变子视图的状态。但是视图没有更新。

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,我的主视图中仍然有一些子视图。

【问题讨论】:

    标签: ios swift swiftui subview


    【解决方案1】:

    如果视图是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()
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 2022-01-25
      • 1970-01-01
      • 2019-10-22
      • 2019-10-19
      • 2019-10-23
      • 1970-01-01
      相关资源
      最近更新 更多