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

时间:2019-08-01 15:01:20

标签: 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)

2 个答案:

答案 0 :(得分:7)

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


首先,您可以使用NavigationView。这将提供一个后退按钮,并允许用户返回。请注意,如果您没有按照https://stackoverflow.com/a/57122621/3179416

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")
    }
}

NavigationView


第二,您可以使用.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")
    }
}

.sheet


第三,您可以仅使用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")
    }
}

Changing the view without animation

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

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")
    }
}

Transition with animation

答案 1 :(得分:1)

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

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)
        }
  
    }
}