我的代码中有一个按钮,并且我有一个名为LogindView.swift的文件
单击按钮时,我无法获取打开另一个视图文件的代码。
任何人都可以给我一个例子。
在按钮操作中,我尝试编写LogindView(),但我只是警告我。 “'LogindView'初始化程序的结果未使用”
Button(action: {
// Do action
LogindView()
}, label: {
//** Label text
Text("Logind")
.font(.headline)
.padding(.all)
.foregroundColor(Color.white)
})
.background(Color.blue)
答案 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")
}
}
第二,您可以使用.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")
}
}
第三,您可以仅使用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")
}
}
如果您想对此进行动画处理,以使过渡不会突然出现,您还可以执行以下操作:
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")
}
}
答案 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)
}
}
}