如何通过单击按钮转到另一个视图

Jen*_*sen 4 swiftui xcode11

我的代码中有一个按钮,并且有一个名为LogindView.swift的文件

单击按钮时,我无法获取打开另一个视图文件的代码。

谁能给我一个例子。

在我的按钮操作中,我尝试编写LogindView(),但我只是警告我。“'LogindView'初始化程序的结果未使用”

    Button(action: {
            // Do action
            LogindView()
        }, label: {
            //** Label text
            Text("Logind")
                .font(.headline)
                .padding(.all)
                .foregroundColor(Color.white)
        })
        .background(Color.blue)
Run Code Online (Sandbox Code Playgroud)

Zai*_*ain 7

您基本上可以根据需要在视图之间切换的3个选项。


首先,您可以使用NavigationView。这将提供一个后退按钮,并允许用户返回。请注意,按照/sf/answers/3998583501/的说明,当前不存在NavigationLink内部错误List

import SwiftUI

struct MasterView: View {
        var body: some View {
        NavigationView {
            List {
                NavigationLink(destination: LoginView()) {
                    Text("Login")
                }
            }
            .navigationBarTitle(Text("Master"))
        }
    }
}

struct LoginView: View {
    var body: some View {
        Text("Login View")
    }
}
Run Code Online (Sandbox Code Playgroud)

导航视图


其次,您可以使用来呈现模态.sheet。这将显示一个模态,该模态显示在当前视图的顶部,但用户可以通过向下拖动将其关闭。

import SwiftUI

struct MasterView: View {
    @State var isModal: Bool = false

    var body: some View {
        Button("Login") {
            self.isModal = true
        }.sheet(isPresented: $isModal, content: {
            LoginView()
        })
    }
}

struct LoginView: View {
    var body: some View {
        Text("Login View")
    }
}
Run Code Online (Sandbox Code Playgroud)

。片


第三,您可以使用if语句将当前视图更改为登录视图,如下所示

import SwiftUI

struct MasterView: View {
    @State var showLoginView: Bool = false

    var body: some View {
        VStack {
            if showLoginView {
                LoginView()
            } else {
                Button("Login") {
                    self.showLoginView = true
                }
            }
        }
    }
}

struct LoginView: View {
    var body: some View {
        Text("Login View")
    }
}
Run Code Online (Sandbox Code Playgroud)

无需动画即可更改视图

如果您想对此进行动画处理,以使过渡不会突然出现,您还可以执行以下操作:

import SwiftUI

struct MasterView: View {
    @State var showLoginView: Bool = false

    var body: some View {
        VStack {
            if showLoginView {
                LoginView()
                    .animation(.spring())
                    .transition(.slide)
            } else {
                Button("Login") {
                    withAnimation {
                        self.showLoginView = true
                    }
                }.animation(.none)
            }
        }
    }
}

struct LoginView: View {
    var body: some View {
        Text("Login View")
    }
}
Run Code Online (Sandbox Code Playgroud)

动画过渡

  • 还有 .fullScreenCover 选项,使用它的方式与您解释的模式表相同。 (2认同)

小智 5

您可以使用导航链接代替按钮

var body: some View {
    VStack {
        Text("Title")
            .font(.headline)
        Image("myimage").clipShape(Circle())
        Text("mytext").font(.title)
        
        NavigationLink(destination: AnotherView()) {
           Image(systemName: "person.circle").imageScale(.large)
        }
  
    }
}
Run Code Online (Sandbox Code Playgroud)