SwiftUI:如何更改子视图?

Posted

技术标签:

【中文标题】SwiftUI:如何更改子视图?【英文标题】:SwiftUI: How to change subview? 【发布时间】: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,我的主视图中仍然有一些子视图。

【问题讨论】:

【参考方案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()
            
        
    

【讨论】:

以上是关于SwiftUI:如何更改子视图?的主要内容,如果未能解决你的问题,请参考以下文章

子视图更改SwiftUI后更新视图

SwiftUI 动画如何与子视图隔离?

在 SwiftUI MVVM 中的子视图和父视图之间共享值

在 SwiftUI 中更改完成视图

如何在 SwiftUI 中禁用位置动画?

如何全屏显示 SwiftUI 子视图?