我想在使用SwiftUI的应用程序上拥有一个登录表单。我有两个按钮:登录和注册。我希望能够按下注册按钮,并使我创建的新SwiftUI视图出现/替换另一个视图。这是我的按钮代码:
let signupButton = Color(red: 103.0/255.0, green: 104.0/255.0, blue: 255.0/255.0)
let text : String
var body: some View {
Button(action: {
}) {
Text(text)
.accentColor(.white)
// .frame(minWidth: 0, maxWidth: 300)
.frame(width: 200)
.padding()
.background(signupButton)
.cornerRadius(10)
.padding()
}
}
}
然后进入我的登录页面:
struct LoginPage: View {
let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
let textFieldBackground = Color(red: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0)
let textFieldBorder = Color(red: 112.0/255.0, green: 112.0/255.0, blue: 112.0/255.0)
let signupButton = Color(red: 103.0/255.0, green: 104.0/255.0, blue: 255.0/255.0)
var body: some View {
NavigationView {
Text("Don't have an account?")
.fontWeight(.light)
NavigationLink(destination: SignupPage()) {
ActionButton(text: "sign up")
}
}
.navigationBarTitle(Text("Signin")
.foregroundColor(Color.black))
}
}
}
问题是,当我按下按钮时,注册页面没有显示。我有一个已经设计好的页面,名为SignupPage()
,引用正确。我不知道这是否是错误,还是我做错了所有
答案 0 :(得分:1)
NavigationLink
就像按钮一样,您不需要使用Button
。如果这样做,则需要为其定义一个操作。解决方法:
struct LoginPage: View {
let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
let textFieldBackground = Color(red: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0)
let textFieldBorder = Color(red: 112.0/255.0, green: 112.0/255.0, blue: 112.0/255.0)
let signupButton = Color(red: 103.0/255.0, green: 104.0/255.0, blue: 255.0/255.0)
var body: some View {
NavigationView {
VStack {
Text("Don't have an account?")
.fontWeight(.light)
NavigationLink(destination: SignupPage()) {
ActionButton(text: "sign up")
}
}
}
.navigationBarTitle(Text("Signin")
.foregroundColor(Color.black))
}
}
struct SignupPage: View {
var body: some View {
Text("Signup page placeholder")
}
}
struct ActionButton: View {
let signupButton = Color(red: 103.0/255.0, green: 104.0/255.0, blue: 255.0/255.0)
let text : String
var body: some View {
Text(text)
.accentColor(.white)
// .frame(minWidth: 0, maxWidth: 300)
.frame(width: 200)
.padding()
.background(signupButton)
.cornerRadius(10)
.padding()
}
}
答案 1 :(得分:0)
如果在导航到另一个视图之前需要使用按钮并具有某种行为,则可以使用以下代码:
struct FooView: View {
@State private var presentView = false
var body: some View {
NavigationLink(destination: AnotherView(), isActive: self.$presentView) {
Button(action: {
//do something here
self.presentView = true
}) {
Text("Navigate!")
.frame(width: 100, height: 200)
}
}
}
}