如何使用 Button (action:{}) {} 以编程方式转到 swiftUI 中的另一个视图,而不是任何 NavigationLink 或其他什么?

1 macos button swiftui

我正在尝试以编程方式更改 macOS 应用程序中的视图。我找到了诸如 NavigationLink 之类的东西,但我不允许使用它们。要切换的代码必须在Button的action中,因为这样我知道我可以从代码中快速切换,即使它不是按钮格式的。我怎样才能做到这一点?

ContentView.swift 中的按钮:

Button(action: {
    //What goes here. Tried Settings(), didn't work          
}) {
    Text("Settings")
}.buttonStyle(PlainButtonStyle())
Run Code Online (Sandbox Code Playgroud)

设置.swift:

import SwiftUI

struct Settings: View {
    var body: some View {
        Text("Hello, world!")
    }
}
Run Code Online (Sandbox Code Playgroud)

没有 NavigationLink、没有 NavigationView 或其他什么。我正在寻找一种纯粹在按钮操作中执行此操作的方法。

我还有一个关于这个话题的问题,所以如果你知道 swiftui,请点击这里,回答这个问题对我来说很重要。如果您回答了这个问题,也许您可​​以回答另一个问题,如果该问题得到了可接受的答案,那么它就会亮起。

iDr*_*oid 5

基本上,你需要3 views在这里实现这个功能,MainContentView来切换视图(HomeView & SettingView)。

这里HomeView包含Setting button并有一个@Binding变量来处理按钮点击ContentView

因此,每当您单击Setting按钮时HomeView,它将切换settingView变量的值 ContentView并根据其值切换视图。

试试下面的代码。

内容视图:

struct ContentView: View {
    @State var settingView = false

    var body: some View {
        VStack {
            if self.settingView {
                Settings()
            } else {
              HomeView(buttonClick: $settingView)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

主页视图:

struct HomeView: View {
        @Binding var buttonClick: Bool

        var body: some View {
            VStack {
                Button(action: {
                    withAnimation {
                        self.buttonClick.toggle()
                    }
                }) {
                    Text("Settings")
                }.buttonStyle(PlainButtonStyle())
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)