【问题标题】:Swiftui connect command to value in main viewSwiftui 将命令连接到主视图中的值
【发布时间】:2021-04-26 07:28:37
【问题描述】:

有人知道如何将命令连接到项目的其余部分吗?
例如:我想在内容视图中切换 AddNew 变量以使用命令显示添加新项目表。

struct SampleApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .commands {
             CommandGroup(after: CommandGroupPlacement.newItem) {
                Button("Add new", action: {
                    
                self.AddNew.toggle() // should toggle variable in content View

                })
            }
        }
    }
}

struct ContentView: View {
 @State var AddNew = false
    var body: some View { 

        Button(action: {
            self.AddNew.toggle()
        }) {
            Text("Show Detail")
        }.sheet(isPresented: $AddNew) {
            AddNew(dimiss: $AddNew)
        }

 }
    
}


【问题讨论】:

    标签: swift macos swiftui swift5


    【解决方案1】:

    解决方案可能是在符合ObservableObject 的类中使用@Published var

    您可以在类中切换布尔值 并从任何您想要的地方访问它(例如@EnvironmentObject)。

    像这样:

    class AppModel: ObservableObject {
        
        @Published var addNew: Bool = false
    
    }
    
    struct SampleApp: App {
    
        @ObservedObject var model = AppModel()
    
        var body: some Scene {
            WindowGroup {
                ContentView()
                    .environmentObject(model)
            }
            .commands {
                 CommandGroup(after: CommandGroupPlacement.newItem) {
                    Button("Add new", action: {
                        self.model.addNew.toggle()
                    })
                }
            }
        }
    }
    
    struct ContentView: View {
    
        @EnvironmentObject var model: AppModel
    
        var body: some View { 
    
            Button(action: {
                self.model.addNew.toggle()
            }) {
                Text("Show Detail")
            }.sheet(isPresented: $model.addNew) {
                AddNew(dimiss: $model.addNew)
            }
    
     }
        
    }
    

    【讨论】:

    • 如果AppModel 不能在多个场景之间共享,你会怎么做?换句话说,每个 ContentView 都需要有自己的模型。
    猜你喜欢
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多