如果出于某种原因我不想使用 NavigationStack 或 NavigationView,是否可以通过单击按钮调用新视图?
我尝试了下面的代码,但是我能得到的最远的是获取返回的视图,但我不知道如何调用它。
“调用‘getView(view:)’的结果未使用”
import SwiftUI
struct BasicButton: View {
var buttonLabel = "Create User"
var body: some View {
Button {
getView(view: "CreateUser")
} label: {
Text(buttonLabel)
.foregroundStyle(.white)
.font(.title2)
}
.frame(width: 250, height: 55)
.background(.blue)
.cornerRadius(10)
}
}
@ViewBuilder func getView(view: String) -> any View {
switch view {
case "CreateUser":
CreateUser()
default:
EmptyView()
}
}
struct CreateUser: View {
var body: some View {
Text("Hello")
}
}
#Preview {
BasicButton()
}
#Preview {
CreateUser()
}
您无法在
View
的操作闭包内返回 Button
。相反,您应该更改一些状态,然后将其反映在视图层次结构中。
这是一个例子:
enum Page {
case button
case createUser
}
struct ContentView: View {
@State private var page: Page = .button
var body: some View {
switch page {
case .button:
BasicButton(page: $page)
case .createUser:
CreateUser()
}
}
}
struct BasicButton: View {
@Binding var page: Page
private static let buttonLabel = "Create User"
var body: some View {
Button {
page = .createUser
} label: {
Text(Self.buttonLabel)
.foregroundStyle(.white)
.font(.title2)
}
.frame(width: 250, height: 55)
.background(.blue)
.cornerRadius(10)
}
}
struct CreateUser: View {
var body: some View {
Text("Hello")
}
}
请注意,如果您确实想在某个时刻使用
ViewBuilder
,例如在 getView
函数中,您需要返回 some View
,而不是 any View