我正在尝试以编程方式更改我的macOS应用程序中的视图。一世 找到了NavigationLink等其他内容,但我不允许使用它们。切换的代码必须在Button的操作中,因为这样,我知道即使代码不是按钮格式,也可以快速从代码中切换。我该怎么办?
ContentView.swift中的按钮:
Button(action: {
//What goes here. Tried Settings(), didn't work
}) {
Text("Settings")
}.buttonStyle(PlainButtonStyle())
Settings.swift:
import SwiftUI
struct Settings: View {
var body: some View {
Text("Hello, world!")
}
}
没有NavigationLink,没有NavigationView或其他任何内容。我正在寻找一种纯粹在按钮操作范围内执行此操作的方法。
我对此主题还有另一个问题,因此,如果您知道swiftui,请单击here,对我来说至关重要的是回答它。如果您回答了这个问题,也许您可以回答另一个问题,并且如果该问题得到了可接受的答案,那么它将被点亮。
答案 0 :(得分:2)
这里是一个例子:
在按钮的action
块中,您不能放置view
。但是您可以切换bool
,它是一个@State
变量,它会更新view
并在true
时显示不同的视图。我在.transition()
中添加了动画,但是您需要在withAnimation
变量的更改周围加上@State
才能使其正常工作。
struct ContentView: View {
@State var showView = false
var body: some View {
GeometryReader { proxy in
ZStack {
if self.showView {
VStack {
Text("Settings View")
Button(action: {
withAnimation {
self.showView.toggle()
}
}, label: {
Text("Back")
})
}
.frame(width: proxy.size.width, height: proxy.size.height)
.background(Color.red)
.transition(.move(edge: .trailing))
} else {
VStack {
Text("Home View")
Button(action: {
withAnimation {
self.showView.toggle()
}
}, label: {
Text("Settings")
})
}
.frame(width: proxy.size.width, height: proxy.size.height)
.background(Color.green)
}
}
}
}
}
我希望这会有所帮助!
答案 1 :(得分:1)
基本上,这里需要3 views
才能实现此功能,
主ContentView
来切换视图(HomeView和SettingView)。
此处HomeView
包含Setting button
,并具有一个@Binding
变量来处理对ContentView
的按钮单击。
因此,每当您点击Setting
上的HomeView
按钮时,它将切换
settingView
的{{1}}变量,并根据其值切换视图。
尝试下面的代码。
ContentView:
ContentView
HomeView:
struct ContentView: View {
@State var settingView = false
var body: some View {
VStack {
if self.settingView {
Settings()
} else {
HomeView(buttonClick: $settingView)
}
}
}
}
答案 2 :(得分:0)
如果您在第一个视图上单击开始,它会将您导航到下一个视图。您可以编辑第一个视图以满足您的视图要求
GloryHUbApp.swift
import SwiftUI
@main
struct GloryHubApp: App {
@State var currentStage = "OnboardingView"
var body: some Scene {
WindowGroup {
if(self.currentStage == "OnboardingView"){
StartButtonView(currentStage: $currentStage)
} else if(self.currentStage == "LoginView"){
NextView()
}
}
}
}
ButtonView.swift
import SwiftUI
struct StartButtonView: View {
// MARK: - PROPERTIES
@Binding var currentStage: String
// MARK: - BODY
var body: some View {
Button(action: {
//appStage = "LoginView"
self.currentStage = "LoginView"
}) {
HStack (spacing: 8) {
Text("START")
}
} //: BUTTO
}
}
答案 3 :(得分:0)
import SwiftUI
struct StartButtonView: View {
@State private var isActive = false
var body: some View {
Button(action: {
isActive = true
}, label: {
Text("START")
})
NavigationLink(destination: Settings(), isActive: $isActive) { }
}