是否可以通过单击按钮转到新视图,而不使用NavigationStack(视图)?

问题描述 投票:0回答:1

如果出于某种原因我不想使用 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()
}
swiftui
1个回答
0
投票

您无法在

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

© www.soinside.com 2019 - 2024. All rights reserved.